最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Linux如何配置Git LFS大文件存储 Git处理大型二进制文件详解
时间:2026-06-06 08:03:52 编辑:袖梨 来源:一聚教程网
必须先安装git-lfs再运行git lfs install,因Git本身不含LFS功能,Linux默认不预装;直接执行git lfs track会报command not found;安装后git lfs install配置全局filter和钩子,而git lfs track须在git add前执行以确保大文件被LFS接管。
Linux上必须先装git-lfs再运行git lfs install
Git自带的git命令不包含LFS功能,Linux发行版默认也不预装git-lfs。直接运行git lfs track会报错command not found。不同包管理器安装方式不同:
- Ubuntu/Debian:
sudo apt-get install git-lfs(注意:部分旧源可能只有1.0以下版本,需确认git lfs version≥ 1.0.1) - CentOS/RHEL:
sudo yum install git-lfs或sudo dnf install git-lfs - 手动安装(推荐用于新版):从GitHub Releases下载最新
git-lfs-linux-amd64-v*.tar.gz,解压后执行./install.sh,它会自动把二进制放到/usr/local/bin并运行git lfs install --skip-repo
git lfs install本质是往~/.gitconfig写入filter.lfs配置,并在~/.git/hooks放钩子脚本。它只影响当前用户全局Git环境,不操作任何仓库目录。
git lfs track必须在git add前执行,否则大文件已进对象库
常见错误是先git add assets/model.onnx,再git lfs track "*.onnx"——此时文件早已被Git压缩存进.git/objects,LFS无法接管。正确顺序是:
- 确保目标文件未被
git add过(可用git status确认) - 运行
git lfs track "*.onnx",它会在项目根目录生成或修改.gitattributes,内容类似*.onnx filter=lfs diff=lfs merge=lfs -text -
git add .gitattributes(必须提交该文件,否则协作成员无法生效) -
git add assets/model.onnx(这时LFS钩子才会拦截,上传真实文件到LFS服务器,本地只留指针)
注意:git lfs track "data/**/*.bin"这种递归写法依赖Git ≥ 2.22;老版本只能用git lfs track "*.bin"或逐个目录git lfs track "data/a.bin" "data/b.bin"。
克隆含LFS仓库时,git clone默认只拉指针,git lfs pull才下真文件
很多人克隆后发现.psd文件只有1KB,打开是ASCII文本(指针内容),这就是LFS的正常行为。原因在于Git默认启用smudge过滤器,但网络失败或配置异常会导致跳过下载。
- 安全克隆方式(推荐):
GIT_LFS_SKIP_SMUDGE=1 git clone <url>,避免首次克隆因网络卡住 - 进目录后手动拉取:
git lfs pull(拉取所有LFS文件)或git lfs pull --include="*.onnx"(按需拉取) - 验证是否成功:
git lfs ls-files列出被跟踪文件,ls -lh assets/model.onnx确认大小是否为真实体积
如果git lfs pull报batch request: Unauthorized,说明远程LFS端点未认证——检查git remote get-url origin是否为HTTPS地址(SSH协议需额外配置LFS端点URL)。
已有仓库含大文件?用git lfs migrate重写历史要谨慎
项目已提交过100MB.zip且有多个历史版本,不能靠git rm --cached简单清理——旧提交里仍存完整对象。必须用迁移工具:
- 先备份:
git branch backup-before-lfs-migrate - 运行:
git lfs migrate import --include="*.zip,*.psd" --everything - 强制推送:
git push --force --all && git push --force --tags
这个操作会重写所有匹配文件的提交历史,所有协作者必须重新git clone,旧克隆仓库执行git pull会失败。另外,git lfs migrate不清理本地.git/objects中残留的原始大文件对象,需后续运行git reflog expire --expire=now --all && git gc --prune=now释放空间。