本地 git lfs 仓库

今天和Grok聊天,偶然得知Git LFS支持standalone file transfer adapter,也就是不通过 HTTP,而是使用文件协议或本地目录,于是便想尝试一下。

准备工作

在 macOS 上,使用 Homebrew 安装 lfs,然后安装全局钩子:

brew install git-lfs
git lfs install

接下来选择一个目录作为 LFS 对象存储,例如 ~/Projects/git-lfs-storage 并初始化为 bare 仓库,否则会报 git rev-parse --git-dir 错误。初始化bare仓库这一步很关键,Grok 犟得很,非说不用初始化,让我浪费了很多时间。

测试

  • 创建新仓库:mkdir ~/lfstest && cd ~/lfstest && git init
  • 添加大文件:例如 echo "test" > bigfile.bin
  • 配置追踪规则:git lfs track "*.bin"。这一步会自动创建 .gitattributes 并添加内容 *.bin filter=lfs diff=lfs merge=lfs -text
  • 配置 .lfsconfig,使用 git config -f .lfsconfig lfs.url "file:///path/to/git-lfs-storage",即 file:// 协议加上 路径 /User/$USER/git-lfs-storage
  • 然后把文件添加到git仓库并提交: git add .gitattributes bigfile.bin .lfsconfig && git commit -m "init"。这里一定要把 .lfsconfig 添加到 git 中,否则之后 pull 的时候会出现 smudge 错误。
  • 正常添加远程 bare 仓库,然后 push。

注意点

  1. 需要 git init --bare lfs 的存储仓库
  2. 需要把 .lfsconfig 提交到远程仓库