Git 大文件 LFS
Git LFS 是一个易于安装、易于配置,使用高效的 Git 拓展工具,它能有效的管理仓库中的大文件,避免仓库体积过大,影响项目管理效率
为什么使用 LFS
这段是废话,既然看到了这里,说明你应该已经需要用 LFS 了,跳过吧!
- 主流 Git 托管服务都支持 LFS,如
GitHub
,Gitee
,GitLab
, 云效等 - 有些托管服务的 Git 仓库限制了大文件,或者限制仓库总大小,如
GitHub
目前限制文件不能超过100MB
- 仓库太大每次 pull/push 都很慢
- 大文件往往很少修改
使用 LFS 不仅能解决大文件带来的仓库问题,同时托管服务也对大文件做了传输速度优化
开启 LFS
按以下操作给已有仓库开启 LFS
- 初始化 lfs,在项目目录下运行:
1 | git lfs install |
- 跟踪大文件,并生成
.gitattributes
:
1 | git lfs track "xxx/file.mp4" |
- 提交修改:
1 | git add -A |
之后就和普通仓库一样操作即可
新增大文件
可以重复执行以上命令
1 | git lfs track "xxx/file.mp4" |
也可以手动修改文件 .gitattributes
添加文件,可以和 .gitignore
一样使用通配符
删除历史大文件
如果之前的提交有大文件,在不回退提交的前提下,删除文件是不会在 git 中删除大文件的
可以用以下方式修改历史提交,彻底删除大文件
查找大文件
- 查看文件大小
1 | du -ah .git/object |
如果在 Windows 系统无法执行上述语句,可以用 sh
命令切换到 git bash 中执行,后续命令同样如此
- 查看占用空间最多的五个文件
1 | git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')" |
删除大文件
- 修改历史提交以删除大文件
1 | git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch 你的大文件名' --prune-empty --tag-name-filter cat -- --all |
- 清理本地仓库
1 | rm -rf .git/refs/original/ |
- 提交并覆盖远程仓库
1 | git push origin main --force |
如果该分支被保护,需要在托管网站解除保护才能 force
提交