GitLFS详解

Kaku Lv3

Git-LFS

Git作为世界上最优秀的分布式版本控制工具,也是优秀的文件管理工具,它赋予了项目成员对项目进行远程协同开发能力,因此受到越来越多的行业从业人员的喜爱。很多优秀的项目管理平台,比如国内的Gitee,国外的Github,也都是以Git为核心操作。但是有些用户,尤其是游戏行业以及媒体行业人员可能会遇到一个问题,那就是随着提交的文件越来越多,项目越来越大,Git的响应速度越来越慢,更烦人的是,在提交到远程仓库的最后一刻,系统可能会提示用户此次提交被拒绝,原因是提交的文件太大,触发平台额度限制(无论是哪个平台),相信很多人在这一刻是崩溃的。

那么该如何避免这种崩溃事件的发生呢?

下面就介绍今天的主角**Git LFS(Git Large File Storage)**,即Git大文件存储技术。

在Git仓库中,对于非文本文件,如各种多媒体文件,软件制品文件,二进制文件等等,这些文件往往体积比较大,使用Git直接管理会导致仓库的体积迅速膨胀,进而导致Git的许多操作变慢,同时也影响仓库上传到远程端。

Git LFS相当于Git的一种插件式增强工具,简单讲,它是在Git仓库使用这些文件的 指针代替 实际文件,而把实际文件存储在远程端LFS服务器,同时在本地仓库中实时追踪这些文件的变动。

a diagram showing how Git LFS works

原理

根据 Git LFS 官方帮助文档描述:

Git LFS是基于Git的 .gitattributs 配置文件的特性,用 smudge过滤器基于 指针文件寻找大文件内容, 用 clean过滤器在对大文件改动时,创建指针文件的新版本。同时还用 pre-push钩子将大文件上传到Git LFS服务器, 即在 git-push时, 如果提交中包含被LFS跟踪的大文件,pre-push钩子会检测到,并执行上传Git LFS服务器的动作。

因此,如果一个仓库中包含LFS内容,但是在推送时不想推送这类文件,只要加上 –no-verify选项就行,即:

1
2
$ git push --no-verify
--no-verify选项告诉 git push完全跳过 pre-push钩子。

前面提到被LFS管理的文件,本地仓库中保存的内容实际上是指针文件,其格式类似于下面这样:

1
2
3
4
5
6
$ git show HEAD:2.svg

version https://git-lfs.github.com/spec/v1
oid sha256:158213f90f8b27012034c6f58db63e1861b12aa122d98910de311bf1cb1e50a0
size 14651
(END)

version表示LFS的版本
oid表示文件对象的唯一hash值
size表示文件的大小

安装Git LFS

Windows

  • 单独下载 Git LFS 安装包,并按照提示进行安装。
  • 使用 Git for Windows 安装程序安装 Git LFS。在安装过程中,选择“Git LFS”作为可选组件进行安装。
  • 或者,使用 Chocolatey 包管理器安装 Git LFS:choco install git-lfs。

macOS

  • 单独下载 Git LFS 安装包,并按照提示进行安装。
  • 使用 Homebrew 安装 Git LFS:brew install git-lfs。
  • 或者,从 Git LFS GitHub 仓库 下载并安装。

Linux

  • 单独下载 Git LFS 安装包,并按照提示进行安装。
  • 使用你的包管理器安装 Git LFS。例如,在 Ubuntu 上,你可以使用 sudo apt-get install git-lfs。
  • 或者,从 Git LFS GitHub 仓库 下载并安装。

install

初始化 Git LFS

安装完成后,通过在git仓库中运行以下命令初始化 Git LFS:

1
git lfs install

这个命令会设置必要的 Git 钩子,以便 Git LFS 可以与 Git 正常工作。

使用 Git LFS

现在你可以开始使用 Git LFS 了。要跟踪大文件,使用以下命令:

如要将所有 *.mp4 文件作为 Git LFS 内容进行跟踪,请运行以下命令:

1
git lfs track "*.mp4"

此命令会创建一个 .gitattributes 文件,其中包含所有匹配的规则。

然后 不要忘记将新增git配置文件添加到 Git 仓库:

1
2
3
git add .gitattributes
git add your_large_file.dat
git commit -m "Add large file"

Git LFS 会替换大文件为指针文件,只有指针文件会被推送到远程仓库。

注意事项

  • 确保你的 Git 仓库中的所有用户都安装了 Git LFS 如果你在没有安装Git LFS的机器尝试拉取仓库,可能会导致文件丢失。
  • 如果你在团队中工作,确保所有团队成员都安装并初始化了 Git LFS。
  • 有些 Git 服务(如 GitHub、GitLab 和 Bitbucket)需要额外的设置来支持 Git LFS。(可能需要额外付费)
  • 标题: GitLFS详解
  • 作者: Kaku
  • 创建于 : 2024-11-10 23:02:14
  • 更新于 : 2024-11-10 23:38:59
  • 链接: https://www.kakunet.top/2024/11/10/GitLFS详解/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论