在 gitlab 项目仓库中使用 Git LFS 存储二进制大文件

目录
[隐藏]

Git LFS(Git Large File Storage) 主要用于解决向 git 仓库中提交二进制大文件的存储问题。
基于 git 的版本管理机制,当频繁的改动并提交二进制大文件至仓库时,会导致仓库大小迅速膨胀,从而带来仓库拉取和提交变慢等问题。
Git LFS 根据设置规则,将指定类型的文件版本管理放在 LFS 大文件服务器上,git 仓库中仅使用 index 索引指向 LFS 大文件服务器上的对应文件。

1. 安装 Git LFS

官网下载并安装:

Mac 电脑可以使用 Homebrew 或 MacPorts 快速安装:

  • Homebrew: brew install git-lfs
  • MacPorts: port install git-lfs

安装完成后,执行如下命令初始化 LFS:

git lfs install

2. 在 Git 项目中设置 LFS

如我们需要将 .psd.zip.dll.exe.node 后缀类型的二进制文件设置为使用 lfs。执行如下命令:

git lfs track "*.psd" "*.zip" "*.exe" "*.dll" "*.node"

执行之后,将在项目当前目录创建文件(若没有) .gitattributes,在其中写入或更新相关后缀类型的设置如下:

*.psd filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.exe filter=lfs diff=lfs merge=lfs -text
*.node filter=lfs diff=lfs merge=lfs -text

记得将该文件添加到 git 仓库中,执行命令:git add .gitattributes

3. 在 gitlab 项目设置中开启 LFS

具体到开关在如下设置路径 Settings-General--Visibility, project features, permissions-Git Large File Storage,参见如下图示。

如以上设置顺利,后续提交 .psd.zip.exe.node后缀类型的大文件至 git,则会使用 LFS 进行存储。提交至 gitlab 后,该文件后会有 LFS 标识。

注意:如果本地没有安装 Git LFS 且只 clone 了仓库本身,git pull 只能获取仓库本身内容,存储在 LFS 上的内容只有版本索引信息

4. 迁移仓库中已有的文件至 LFS

Git LFS 只会在设置之后追踪新生成的指定文件,对于已有的文件则可以使用 git lfs migrate  命令进行迁移。相关方法与步骤参考如下:

# 查看当前 git 项目中大于 1M 的 TOP10 文件(全部提交历史记录的所有文件之和)
git lfs migrate info --above="1MB" --everything --top 10

# 迁移已有的 node 类型文件
git lfs migrate import --include="*.node,*.dll,*zip" --everything
# 查看 lfs 管理的文件列表。如有匹配到相关文件,则可以在执行结果中看到
# 使用 force 命令强制让远端仓库同步变更,需要有 force 权限才行
git push --force

5. Git LFS 常用命令参考

  • 使用 Git LFS 管理指定类型的文件: git lfs track "*.psd"
  • 不再使用 Git LFS 管理指定类型的文件: git lfs untrack "*.psd" && git rm --cached "*.psd"
  • 查看当前项目中使用 Git LFS 管理的匹配列表: git lfs track
  • 枚举目前所有被 Git LFS 管理的具体文件: git lfs ls-files
  • 查看当前 Git LFS 对象的状态: git lfs status
  • pull LFS 文件: git lfs pull
  • 查看 Git LFS 的版本: git lfs version

6. 总结

对以上主要内容点小结如下:

  • 安装:所有用户都应从官网下载并安装 Git LFS
  • 配置:使用 git lfs track 命令配置要使用 LFS 的文件类型;在 gitlab 设置中也要打开开关
  • 迁移:使用 git lfs migrate 可以迁移已有文件
  • 注意事项
    • 所有用户都需要安装 LFS,否则拉取的仓库中,存储在 LFS 服务器上的文件在本地的内容只有索引信息
    • more…

相关参考链接:

点赞 (2)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code