【Git】保姆级教程:如何在 GitHub 上传大文件(≥100M)?(含自己的操作流程)

开源 0

文章目录

  • 一、问题导读
  • 二、自己的实际操作流程
    • 2.1 准备工作
    • 2.2 初始化仓库
    • 2.3 安装git lfs(一个仓库里面执行一次就好了)
    • 2.4 跟踪一下你要上传(push)的文件或指定文件类型
    • 2.5 添加.gitattributes
    • 2.6 添加要上传(push)的文件并提交(commit)
    • 2.7 将本地与新建仓库进行配对
    • 2.8 让上传看起来更连续,而不是多出很多无用的merge commit
    • 2.9 正式上传

一、问题导读

GitHub是我们常用的代码托管平台,但GitHub有一个限制,不能上传超过100M的文件。

如果要上传的文件超过 GitHub 的文件大小限制,你可以考虑以下方法:

  1. 使用 Git LFS:Git LFS(Large File Storage)是一个扩展工具,用于管理大文件。它允许你将大文件存储在 Git 仓库之外,并在仓库中保留文件的引用。通过使用 Git LFS,你可以上传和管理大文件,而不受 GitHub 文件大小限制的影响。
  2. 使用外部存储服务:如果你的文件非常大,超过了 Git LFS 的限制,你可以考虑使用外部存储服务,如云存储服务(如 Amazon S3、Google Cloud Storage)或文件传输服务(如 Dropbox)。你可以将文件上传到外部存储服务,然后在 GitHub 仓库中添加一个指向外部存储位置的链接或引用。

我们这里采用Git LFS扩展工具。

Git LFS(Large File Storage)是一个 Git 扩展工具,用于管理大文件。它通过将大文件存储在 Git 仓库之外,并在仓库中保留文件的引用,来解决 Git 对大文件的处理效率和限制问题。

以下是关于 Git LFS 的一些重要概念和使用方法:

  1. 安装 Git LFS:首先,你需要在本地系统上安装 Git LFS。可以从 Git LFS 官方网站(https://git-lfs.github.com/)下载适合你操作系统的安装程序,并按照说明进行安装。
  2. 初始化 Git LFS:在你的 Git 仓库中,使用以下命令来初始化 Git LFS:
git lfs install

这将在当前仓库中启用 Git LFS。

  1. 跟踪大文件:使用以下命令告诉 Git LFS 跟踪特定文件类型的大文件:
git lfs track "*.ext"

*.ext 替换为你要跟踪的文件类型的模式,例如 *.mp4*.zip。Git LFS 将会为匹配的文件类型启用跟踪。

  1. 添加和提交大文件:使用常规的 Git 命令 git add 和 git commit 将大文件添加到 Git LFS 管理中。例如:
git add large_file.extgit commit -m "Add large file using Git LFS"

这将将大文件添加到 Git LFS 管理,并创建一个包含大文件引用的提交。

  1. 推送和拉取大文件:使用常规的 git push 和 git pull 命令来推送和拉取包含大文件的提交。Git LFS 会自动处理大文件的上传和下载。

通过使用 Git LFS,你可以更有效地管理大文件,并避免 Git 对大文件的限制和性能问题。请注意,你需要确保你的 Git 服务器和其他协作者也已正确配置和支持 Git LFS,以便顺利共享和协作处理大文件。

二、自己的实际操作流程

首先看一下我要上传的文件:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我有一个pretrained_ckpt的文件夹,里面有四个文件夹,每一个文件夹里面都有好多个pth大文件,我该如何上传到我的github远程仓库上呢?

下面是我的一个详细的步骤:

2.1 准备工作

  1. 在电脑中自选目录新建一个文件夹(例:F:/git文件夹/pretrained_ckpt);
  2. 在GitHub上新建一个仓库(Repositories),GitHub有官方教程;
  3. 打开Git Bash,进入刚刚新建的文件夹:
cd /f/git文件夹

在这里插入图片描述

2.2 初始化仓库

git init

git init 是一个 Git 命令,用于在当前目录中初始化一个新的 Git 仓库。通过运行该命令,Git 会在当前目录下创建一个隐藏的 .git 文件夹,用于存储仓库的相关信息和版本控制的历史记录。

如果命令执行成功,你将看到一个类似于以下内容的输出:

Initialized empty Git repository in /path/to/your/repository/.git/

在这里插入图片描述
请注意,Git 仓库中的 .git 文件夹是隐藏的,因此在文件浏览器中可能看不到它。你可以使用命令行或文件浏览器的显示隐藏文件选项来查看它。

在这里插入图片描述

2.3 安装git lfs(一个仓库里面执行一次就好了)

git lfs install

在这里插入图片描述
git lfs install 是 Git LFS(Large File Storage)的命令之一,用于在本地系统中安装 Git LFS 扩展。

下面是使用 git lfs install 安装 Git LFS 的步骤:

  1. 确保你已经在本地系统中安装了 Git。你可以在命令行终端中运行以下命令来验证是否安装了 Git:
git --version

如果已安装 Git,将显示 Git 的版本信息。如果未安装 Git,请按照适用于你操作系统的说明进行安装。

在这里插入图片描述

  1. 打开命令行终端,并进入要使用 Git LFS 的目录。

  2. 运行以下命令:

git lfs install

这将下载和安装 Git LFS 扩展,并将其配置为与 Git 一起使用。

  1. 如果安装成功,你将看到类似以下输出:
Updated git hooks.Git LFS initialized.

这表示 Git LFS 已成功安装和初始化。

现在,你的系统已安装 Git LFS,并可以在 Git 仓库中使用 Git LFS 来管理大文件。你可以使用其他 Git LFS 命令来跟踪大文件、添加文件到 Git LFS 管理、推送和拉取文件等操作。请确保你的 Git 服务器和其他协作者也已正确配置和支持 Git LFS,以便顺利地使用 Git LFS 功能。

2.4 跟踪一下你要上传(push)的文件或指定文件类型

git lfs track "*.pth"

这将告诉 Git LFS 跟踪所有扩展名为 .pth 的文件,并使用 Git LFS 进行管理。

完成上述步骤后,Git LFS 将会跟踪并管理所有匹配 .pth 扩展名的文件。在提交、推送和拉取时,Git LFS 会相应地处理这些大文件,确保它们被正确地上传和下载。

在这里插入图片描述

2.5 添加.gitattributes

.gitattributes 是 Git 的一个配置文件,用于指定特定文件或文件类型的属性和处理方式。它可以用于定义 Git 在处理文件时的行为,例如在版本控制、合并和检出文件时的属性设置。

.gitattributes 文件的作用包括:

  1. 文件属性设置:你可以使用 .gitattributes 文件指定特定文件或文件类型的属性。例如,你可以定义某个文件应被视为二进制文件,或者使用 Git LFS 进行管理。
  2. 文本处理:.gitattributes 文件可以用于指定文本文件的行尾格式(如 CRLF 或 LF),这对于跨平台协作很有用。你可以设置文件的 text 或 binary 属性,控制 Git 是否将其视为文本文件。
  3. 合并策略:通过 .gitattributes 文件,你可以为不同类型的文件指定合并策略,以决定在合并分支时如何处理这些文件的冲突。
  4. 过滤和清理:.gitattributes 文件允许你配置 Git 过滤器,以在提交或检出文件时执行自定义的过滤和清理操作。这对于对文件进行自动处理、格式转换或敏感信息过滤很有用。

.gitattributes 文件的语法是基于模式匹配的,你可以使用通配符、正则表达式和文件路径模式来匹配文件,并为其指定相应的属性和操作。

请注意,.gitattributes 文件需要添加到 Git 仓库,并确保其他协作者在克隆或拉取仓库时能够正确应用这些属性规则。

在命令行终端中,使用 Git 命令将 .gitattributes 文件添加到仓库并提交:

git add .gitattributes

在这里插入图片描述

2.6 添加要上传(push)的文件并提交(commit)

git add .

在这里插入图片描述

git commit -m "RegionCLIP_pretrained_ckpt"

在这里插入图片描述

2.7 将本地与新建仓库进行配对

git remote add origin git@github.com:biluko/RegionCLIP_petrained_ckpt.git

在这里插入图片描述

2.8 让上传看起来更连续,而不是多出很多无用的merge commit

git pull --rebase origin master

在这里插入图片描述
git pull --rebase origin master 是一个 Git 命令,用于从远程仓库(通常是命名为 origin)拉取最新的提交,并通过变基(rebase)方式将本地的提交应用到更新后的远程分支上。

该命令的作用如下:

  1. 从远程仓库(origin)拉取最新的提交:git pull 首先会执行 git fetch,将远程仓库的最新提交下载到本地的远程跟踪分支(例如 origin/master)。
  2. 变基(rebase)本地提交:–rebase 参数告诉 Git 在将本地的提交应用到更新后的远程分支之前,先执行变基操作。变基会将当前分支的提交“重新播放”在远程分支的最新提交之上。
  3. 应用本地提交:在变基操作完成后,Git 会将本地的提交逐个应用到更新后的远程分支上。

使用 git pull --rebase origin master 命令的优势在于能够在提交历史中保持一条干净的线性历史。相比使用普通的 git pull 命令(默认使用合并方式),使用变基可以避免创建额外的合并提交,使得提交历史更加整洁。

然而,需要注意的是,当多个人同时在同一分支上工作时,使用变基操作可能会导致冲突。在进行变基操作前,请确保你的本地分支没有与远程分支冲突的提交,或者在变基后解决任何可能的冲突。

综上所述,git pull --rebase origin master 的作用是拉取远程分支的最新提交,并使用变基方式将本地提交应用到更新后的远程分支上。这有助于保持提交历史的整洁性。

2.9 正式上传

git push -u origin master

在这里插入图片描述

git push origin master

在这里插入图片描述

上传成功!

也许您对下面的内容还感兴趣: