当前位置: 首页 > news >正文

大仓库推到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,哪些是普通文件。

http://www.dtcms.com/a/577095.html

相关文章:

  • 宁夏制作网站公司网站仿静态和静态的区别
  • 【App开发】02:Android Studio项目环境设置
  • 初识MYSQL —— 复合查询
  • 有网站可以接设计的单子做吗招投标网站
  • 基于 WPS TOROW 函数实现 VLOOKUP:多行多列转一行
  • 编译SQLite 3.51源码并体验新功能
  • CMP(类Cloudera CDP 7.3 404版华为泰山Kunpeng)和Apache Doris的对比
  • 水果电商网站建设相关文献163企业邮箱登入口
  • HarmonyOS黑马云音乐项目增加网络听歌功能(一、轮播图的实现)
  • 二、Netty-NIO核心原理详解(NIO核心组件:Buffer、Channel、Selector)
  • 网站短信接口怎么做网站开发环境有什么
  • 网站建设客户开发方案网站建设公司介绍
  • 矩阵乘法优化
  • sward零基础学习,如何在sward文档中集成Kanass事项
  • React使用笔记(持续更新中)
  • ArkTS运行时
  • C语言递归宏详解
  • 指令微调(Instruction Tuning)
  • Linux 中 NIC(网络接口卡)和协议栈的区别以及DPDK
  • MATLAB实现贝叶斯回归预测
  • ZYNQ介绍
  • 【Python】-- 趣味代码 - Piano游戏
  • 解决使用EasyExcel导出带公式的excel,公式不自动计算问题
  • 展示型网站多少钱建设大型网站的公司
  • 前端FAQ: 描述⼀下你最近使⽤过的前端框架,并解释为何选择它们?
  • [特殊字符] 微前端部署实战:Nginx 配置 HTTPS 与 CORS 跨域解决方案(示例版)
  • 短视频矩阵系统搭建指南:源码部署与全流程解析
  • 李沐动手学深度学习笔记(1)
  • 做网站云服务器选择多大带宽北京网站建设有哪些公司好
  • 第8章 模块系统