Git-LFS:大文件也有了版本管理
关于 GitHub 的大小限制
GitHub 限制存储库中允许的文件大小。 如果尝试添加或更新大于 50 MB 的文件,您将从 Git 收到警告。 更改仍将成功推送到仓库,但您可以考虑删除提交,以尽量减少对性能的影响。
GitHub 阻止超过 100 MB 的推送。
要跟踪超出此限制的文件,必须使用 Git Large File Storage (Git LFS)。 更多信息请参阅“关于 Git Large File Storage”。
Git LFS:(Large File Storage)把音乐、图片、视频等指定的任意文件存在 Git 仓库之外,而在 Git 仓库中用一个占用空间 1KB 不到的文本指针来代替文件的存在,通过把大文件存储在 Git 仓库之外,可以减小 Git 仓库本身的体积,使克隆 Git 仓库的速度加快,也使得 Git 不会因为仓库中充满大文件而损失性能;
如果您选择在仓库存档中包含 Git LFS 对象,则每次下载这些存档都会计入您帐户的带宽使用量。 每个帐户每月免费获得 1 GB 的带宽,您可以付费获得额外用量。 更多信息请参阅“关于存储和带宽使用”和“管理 Git Large File Storage 的计费”。
**核心思想:**把需要进行版本管理、但又占用很大空间的那部分文件独立于 Git 仓库进行管理。从而加快克隆仓库本身的速度,同时获得灵活的管理 LFS 对象的能力
安装 Git Large File Storage
Mac
-
导航到 git-lfs.github.com 并单击 Download(下载)。 也可以使用包管理器安装 Git LFS:
如果安装用于 Homebrew 或 MacPorts 的 Git LFS,请跳至步骤 6。 -
在计算机上,找到并解压缩下载的文件。 -
打开 Terminal(终端)。 -
将当前工作目录更改为您下载并解压缩的文件夹。 $ cd ~/Downloads/git-lfs-1.X.X
**注:**在 cd 后面使用的文件路径取决于您的操作系统、下载的 Git LFS 版本以及保存 Git LFS 下载的位置。 -
要安装该文件,请运行以下命令: $ ./install.sh
> Git LFS initialized.
**注:**您可能必须使用 sudo ./install.sh 来安装文件。 -
验证安装成功: $ git lfs install
> Git LFS initialized.
-
如果未看到表示 git lfs install 成功的消息,请联系 GitHub Support。 确保包含操作系统的名称。
Windows
-
导航到 git-lfs.github.com 并单击 Download(下载)。 **提示:**有关安装 Windows 版 Git LFS 的其他方法的更多信息,请参阅此入门指南。 -
在计算机上,找到下载的文件。 -
双击文件 git-lfs-windows-1.X.X.exe,其中 1.X.X 替换为您下载的 Git LFS 版本。 打开此文件时,Windows 将运行安装程序向导以安装 Git LFS。 -
打开 Git Bash。 -
验证安装成功: C:\Users\FLY>git lfs install
Git LFS initialized.
C:\Users\FLY>
-
如果未看到表示 git lfs install 成功的消息,请联系 GitHub Support。 确保包含操作系统的名称。
Linux
-
导航到 git-lfs.github.com 并单击 Download(下载)。 **提示:**有关安装 Linux 版 Git LFS 的其他方法的更多信息,请参阅此入门指南。 -
在计算机上,找到并解压缩下载的文件。 -
打开 Terminal(终端)。 -
将当前工作目录更改为您下载并解压缩的文件夹。 $ cd ~/Downloads/git-lfs-1.X.X
**注:**在 cd 后面使用的文件路径取决于您的操作系统、下载的 Git LFS 版本以及保存 Git LFS 下载的位置。 -
要安装该文件,请运行以下命令: $ ./install.sh
> Git LFS initialized.
**注:**您可能必须使用 sudo ./install.sh 来安装文件。 -
验证安装成功: $ git lfs install
> Git LFS initialized.
-
如果未看到表示 git lfs install 成功的消息,请联系 GitHub Support。 确保包含操作系统的名称。
配置 Git Large File Storage
安装 [Git LFS] 后,需要将其与仓库中的大文件相关联。
Mac
如果仓库中存在要用于 GitHub 的现有文件,则需要先从仓库中删除它们,然后在本地将其添加到 Git LFS。 更多信息请参阅“将仓库中的文件移动到 Git LFS”。
如果有引用的 Git LFS 文件未成功上传,您将收到一条错误消息。 更多信息请参阅“解决 Git Large File Storage 上传失败”。
-
打开 Terminal(终端)。 -
将当前工作目录更改为要用于 Git LFS 的现有仓库。 -
要将仓库中的文件类型与 Git LFS 相关联,请输入 git lfs track ,后跟要自动上传到 Git LFS 的文件扩展名。 例如,要关联 .psd 文件,请输入以下命令: $ git lfs track "*.psd"
> Adding path *.psd
要与 Git LFS 关联的每个文件类型都需要添加 git lfs track 。 此命令将修改仓库的 .gitattributes 文件,并将大文件与 Git LFS 相关联。 **注意:**我们强烈建议您将本地 .gitattributes 文件提交到仓库中。
- 依赖与 Git LFS 关联的全局 .gitattributes 文件,可能会导致在参与其他 Git 项目时发生冲突。
- 在存储库中包含 .gitattributes 文件允许创建复刻或新克隆的人员使用 Git LFS 更轻松地进行协作。
- 在存储库中包含 .gitattributes 文件允许 Git LFS 对象选择性地包含在 ZIP 文件和压缩包存档中。
-
将文件添加到与关联的扩展名相匹配的仓库: $ git add path/to/file.psd
-
提交文件并将其推送到 GitHub: $ git commit -m "add file.psd"
$ git push
您会看到一些有关文件上传的诊断信息: > Sending file.psd
> 44.74 MB / 81.04 MB 55.21 % 14s
> 64.74 MB / 81.04 MB 79.21 % 3s
Windows
如果仓库中存在要用于 GitHub 的现有文件,则需要先从仓库中删除它们,然后在本地将其添加到 Git LFS。 更多信息请参阅“将仓库中的文件移动到 Git LFS”。
如果有引用的 Git LFS 文件未成功上传,您将收到一条错误消息。 更多信息请参阅“解决 Git Large File Storage 上传失败”。
-
打开 Git Bash。 -
将当前工作目录更改为要用于 Git LFS 的现有仓库。 -
要将仓库中的文件类型与 Git LFS 相关联,请输入 git lfs track ,后跟要自动上传到 Git LFS 的文件扩展名。 例如,要关联 .psd 文件,请输入以下命令: $ git lfs track "*.psd"
> Adding path *.psd
要与 Git LFS 关联的每个文件类型都需要添加 git lfs track 。 此命令将修改仓库的 .gitattributes 文件,并将大文件与 Git LFS 相关联。 **注意:**我们强烈建议您将本地 .gitattributes 文件提交到仓库中。
- 依赖与 Git LFS 关联的全局 .gitattributes 文件,可能会导致在参与其他 Git 项目时发生冲突。
- 在存储库中包含 .gitattributes 文件允许创建复刻或新克隆的人员使用 Git LFS 更轻松地进行协作。
- 在存储库中包含 .gitattributes 文件允许 Git LFS 对象选择性地包含在 ZIP 文件和压缩包存档中。
-
将文件添加到与关联的扩展名相匹配的仓库: $ git add path/to/file.psd
-
提交文件并将其推送到 GitHub: $ git commit -m "add file.psd"
$ git push
您会看到一些有关文件上传的诊断信息: > Sending file.psd
> 44.74 MB / 81.04 MB 55.21 % 14s
> 64.74 MB / 81.04 MB 79.21 % 3s
Linux
如果仓库中存在要用于 GitHub 的现有文件,则需要先从仓库中删除它们,然后在本地将其添加到 Git LFS。 更多信息请参阅“将仓库中的文件移动到 Git LFS”。
如果有引用的 Git LFS 文件未成功上传,您将收到一条错误消息。 更多信息请参阅“解决 Git Large File Storage 上传失败”。
-
打开 Terminal(终端)。 -
将当前工作目录更改为要用于 Git LFS 的现有仓库。 -
要将仓库中的文件类型与 Git LFS 相关联,请输入 git lfs track ,后跟要自动上传到 Git LFS 的文件扩展名。 例如,要关联 .psd 文件,请输入以下命令: $ git lfs track "*.psd"
> Adding path *.psd
要与 Git LFS 关联的每个文件类型都需要添加 git lfs track 。 此命令将修改仓库的 .gitattributes 文件,并将大文件与 Git LFS 相关联。 **注意:**我们强烈建议您将本地 .gitattributes 文件提交到仓库中。
- 依赖与 Git LFS 关联的全局 .gitattributes 文件,可能会导致在参与其他 Git 项目时发生冲突。
- 在存储库中包含 .gitattributes 文件允许创建复刻或新克隆的人员使用 Git LFS 更轻松地进行协作。
- 在存储库中包含 .gitattributes 文件允许 Git LFS 对象选择性地包含在 ZIP 文件和压缩包存档中。
-
将文件添加到与关联的扩展名相匹配的仓库: $ git add path/to/file.psd
-
提交文件并将其推送到 GitHub: $ git commit -m "add file.psd"
$ git push
您会看到一些有关文件上传的诊断信息: > Sending file.psd
> 44.74 MB / 81.04 MB 55.21 % 14s
> 64.74 MB / 81.04 MB 79.21 % 3s
常用命令
基本使用
git lfs track "*.pdf"
git lfs untrack "*.pdf"
git lfs track
git lfs status
git lfs ls-files
git lfs version
git lfs clone url/ssh
只获取仓库本身,而不获取任何 LFS 对象
GIT_LFS_SKIP_SMUDGE=1 git clone https://github.com/user/repo.git
git -c filter.lfs.smudge= -c filter.lfs.required=false clone https://github.com/user/repo.git
只推送仓库本身,而不推送任何 LFS 对象
git push --no-verify backup master
获取当前 commit 下包含的 LFS 对象的当前版本
git lfs fetch
git lfs checkout
git lfs pull
获取指定时间的版本
git config lfs.fetchrecentcommitsdays 7
场景
迁移已有的 git 仓库,需要使用 git lfs 管理
git lfs migrate import --include-ref=master --include="*.zip"
git lfs migrate import --everything --include="*.rar,*.zip"
注意:
重写历史后的提交需执行 git commit --force 如有迁移至 git lfs 前的仓库的多份拷贝,其他拷贝可能需要执行 git reset --hard origin/master 来重置其本地的分支,注意执行 git reset --hard 命令将会丢失本地的改动。
参考链接
安装 Git Large File Storage
https://zhuanlan.zhihu.com/p/146683392
https://gitee.com/help/articles/4235#article-header5
|