二进制大文件的版本控制是 Git 的一个弱项,也是很多团队难免会遇到的一个让人头痛的问题

Git 二进制版本控制多种方案,及相关的坑

问题

Git 基于文件快照,非增量diff,二进制文件增量提交支持不好

更新二进制文件,相当于把这份文件的完整内容再往仓库里扔 > 仓库变大,影响拉取速度

方案

http > ssh

git clone http,超时而失败,改用ssh,这思路非常 intuitive(凭直觉)

依旧无法解决clone慢

单分支 clone

–single-branch -b <分支名>

包含二进制的历史依旧需要被clone

浅 clone

git clone –single-branch -b <分支名> –depth 1

仓库不完整,缺失了所有历史记录,不能提交新内容

git lfs

一图胜千言

lfs

大文件存仓库,而存在 LFS server。仓库中只保留文件链接。拉取时由 LFS 钩子 download

仓库改造

git lfs track "*.jar"
git lfs track "*.so"
git lfs track "*.jpg"

已有仓库没有瘦身效果,重建仓库,把各个分支最新的快照同步过来

LFS 坑

小心 hook覆盖

git lfs pre-push "$@" && $basepath/pre-push-custom

gitlab download as zip不包含lfs内容

ci时可用浅克隆 build