大仓库推到GitHub大踩坑-Git LFS从安装到使用

前言

众所周知,GitHub会在单文件>100MB时直接拒绝,总体几个GB的pack也经常触发5xx/断开,博主今天就遇到了:

复制代码
Enumerating objects: 6335, done. Counting objects: 100% (6335/6335), done. 
Delta compression using up to 12 threads Compressing objects: 100% (6315/6315), done. 
error: RPC failed; 
HTTP 500 curl 22 
The requested URL returned error: 500 
send-pack: unexpected disconnect while reading sideband packet 
Writing objects: 100% (6335/6335), 4.36 GiB | 4.00 MiB/s, done. 
Total 6335 (delta 102), reused 1 (delta 0), pack-reused 0 fatal: the remote end hung up unexpectedly 
Everything up-to-date

虽然显示远端remote end hung up了,但真正的原因还是体积过大。那么此时就需要用到Git LFS (Large File Storage) 。怎么用呢?本文将一文讲清,因为博主是踩坑体质,踩了所有坑^^。

(1)错误出现后,先确认远端有没有收到

复制代码
git remote show origin
git fetch origin
git log --oneline origin/main -1

如果看不到本地最新的提交,或出现类似于以下的fatal,则说明远端是空仓库/还没首推成功,就继续按下面的步骤清理。

复制代码
git remote show origin #输入
* remote origin 
Fetch URL: https://github.com/xxx/xxx.git
Push URL: https://github.com/xxx/xxx.git
HEAD branch: (unknown) #主要是这行,没有能在远端创建分支

git log --oneline origin/main -1 
fatal: ambiguous argument 'origin/main':

(2)确认本地分支名

复制代码
git rev-parse --abbrev-ref HEAD
# 如果不是 main,则:
git branch -M main

(3)安装并启用Git LFS

安装方式 1:用 conda(推荐,集群用户最干净)

在当前的 conda 环境里执行:

复制代码
conda install -c conda-forge git-lfs

安装完执行一次(仅一次即可)

复制代码
git lfs install

如果没有报错,会看到提示:

复制代码
Git LFS initialized.

安装方式 2:系统级安装(如果有 sudo 或集群支持)

复制代码
sudo apt-get update sudo apt-get install git-lfs git lfs install

安装方式3:手动安装

因为博主在学校的GPU上运行提交,因此集群上没安装git-lfs也没有sudo权限。因此,博主选择手动安装。

Git-LFS安装链接:https://github.com/git-lfs/git-lfs.git

git fls linux amd64的最新版本3.7.1:Release v3.7.1 · git-lfs/git-lfs(点这个链接)

如图,下载Linux AMD64版本,得到git-lfs-linux-amd64-v3.7.1.tar.gz,把压缩包传送到环境中home的目录并通过以下命令解压,进入解压后的目录

复制代码
tar -xzf git-lfs-linux-amd64-v3.7.1.tar.gz
cd git-lfs-3.7.1

由于3.7.1版本的lfs的二进制包中的install.sh又改版问题,不再接受路径参数,默认会尝试写入/usr/local/bin,所以我们要手动复制可执行文件到用户目录:

复制代码
# 1️⃣ 创建用户级 bin 目录
mkdir -p /home/zhao0546/.local/bin

# 2️⃣ 手动复制可执行文件
cp git-lfs /home/zhao0546/.local/bin/

# 3️⃣ 加入 PATH(临时生效)
export PATH=/home/zhao0546/.local/bin:$PATH

# 4️⃣ 验证是否成功
git lfs version

# 如果输出git-lfs/3.7.1 (Github; linux amd64; go1.x)
说明安装成功

你也可以通过以下操作使其永久生效(目前是临时的)

在~/.bashrc文件中加入

复制代码
export PATH=/home/zhao0546/.local/bin:$PATH

然后执行:

复制代码
source ~/.bashrc

接下来就可以使用Git LFS啦!

(4)如何使用Git LFS

① 进入你的项目目录,执行

复制代码
# 初始化git(如果之前已经init过则跳过)
git init

# 初始化git lfs(同样只需要一次)
git lfs install

② 告诉lfs要追踪哪些文件类型,然后把.gitattributes加入版本控制。

复制代码
#我列出了常用的文件类型,可以直接复制
git lfs track "*.p*" "*.pth" "*.pt" "*.bin" "*.ckpt" "*.onnx" "*.tar" "*.tar.gz" "*.zip" "*.7z" "*.tgz" \
"*.h5" "*.pkl" "*.npy" "*.npz" "*.pb" "*.dat" "*.weights" "*.model" "*.tflite" \
"*.mp4" "*.mov" "*.avi" "*.mkv" "*.jpg" "*.jpeg" "*.png" "*.bmp" "*.gif" \
"*.csv" "*.tsv" "*.jsonl" "*.pickle" "*.db" "*.sqlite" "*.wav" "*.mp3" "*.flac"

#加入.gitattributes进版本控制
git add .gitattributes
git commit -m "Track all large files with Git LFS"

③ 把历史中已有的大文件迁移到LFS

在这一步,会问你:

如果你在前一步还没有commit -m,或输入git status后出现了很多红色文件名(未暂存修改),那就需要再次执行以下上一步的:

复制代码
git add .
git commit -m "save current changes before LFS migrate"

确认没有红色文件名后再进行迁移步骤:

复制代码
git lfs migrate import --include="*.pth,*.pt,*.bin,*.ckpt,*.onnx,*.tar,*.tar.gz,*.zip,*.7z,*.tgz,*.h5,*.pkl,*.npy,*.npz,*.pb,*.dat,*.weights,*.model,*.tflite,*.mp4,*.mov,*.avi,*.mkv,*.jpg,*.jpeg,*.png,*.bmp,*.gif,*.csv,*.tsv,*.jsonl,*.pickle,*.db,*.sqlite,*.wav,*.mp3,*.flac"

④ 创建远端仓库并强制推送

注意,这里只能用--force, Git Hub 会先上传代码,再上传 LFS 对象。第一次上传 4-5 GB 可能需要几十分钟,但之后增量 push 都很快。

复制代码
git remote add origin https://github.com/Ziyan0605/multi-target.git
git branch -M main
git push -u origin main --force

至此,你的仓库就已经成功地推到GitHub上了!

(5)后续push时只需要普通命令

以后修改代码或者模型的时候,只需:

复制代码
git add .
git commit -m "update project"
git push

Git会自动识别哪些是LFS,哪些是普通文件。

相关推荐
玥轩_5212 小时前
Git命令速查手册
大数据·git·elasticsearch·gitee·github·命令速查
吃饺子不吃馅3 小时前
⚡️ Zustand 撤销重做利器:Zundo 实现原理深度解析
前端·javascript·github
whysqwhw3 小时前
KMP类GSON转字符串工具
github
CoderJia程序员甲4 小时前
GitHub 热榜项目 - 日榜(2025-11-06)
ai·开源·大模型·github·ai教程
诸葛思颖7 小时前
把本地 Python 项目用 Git 进行版本控制并推送到 GitHub
git·python·github
chhanz18 小时前
git/github入门基操(终端版)
git·github
林晓lx20 小时前
使用Git钩子+ husky + lint语法检查提高前端项目代码质量
前端·git·gitlab·源代码管理
诸葛思颖21 小时前
一个本地 Git 仓库关联多个远程仓库
git
Bacon21 小时前
Electron 应用商店:开箱即用工具集成方案
前端·github