【Git】GitHub 上传超过 100MB 的大文件(git-lfs)(2021.12.27 更新)

2020/04/23 Git 共 3446 字,约 10 分钟

导读: 最近在 GitHub 上传代码时,需要上传一些大文件,有时候甚至会超过 100MB,则由于 GitHub 不支持上传如此大的文件,所以提交代码时往往都会报错!!!

# 类似报错信息

Total 3007 (delta 664), reused 0 (delta 0)
remote: error: GH001: Large files detected.
remote: error: Trace: 7b7de6b9372ee392e0f3961b05ea6f33
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File  XXX/XXX/XXX is 234 MB; this exceeds GitHub‘s file size limit of 100.00 MB
remote: error: File  XXX/XXX/XXX is 234 MB; this exceeds GitHub‘s file size limit of 100.00 MB。

经过一番资料查询,暂时最优的处理方式就是借助 git lfs 的方式。

Git LFS

Git LFS 基本介绍

Git LFSGithub 开发的一个 Git 的扩展,用于实现 Git 对大文件的支持。

git-grow

git-grow

在游戏开发过程中,设计资源占用了很大一部分空间。像 png、psd 等文件是二进制 (blob) 的,体积也很庞大。

gitdiff/patch 等是基于文件行的,对于二进制文件来说,git 需要存储每次 commit 的改动。

每次当二进制文件修改,发生变化的时候,都会产生额外的提交量,导致 clonepull 的数据量大增,在线仓库的体积也会迅速增长。

LFS(Large File Storage) 就是为了解决这一问题而产生的工具。

它将你所标记的大文件保存至另外的仓库,而在主仓库仅保留其轻量级指针;则在检出版本时,根据指针的变化情况下更新对应的大文件,而不是在本地保存所有版本的大文件。

Store

安装 Git LFS

根据系统环境将 git - lfs 安装到本机。

Linux

curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash

# 安装 git - lfs 到本机
sudo apt-get install git-lfs

Mac

# 安装HomeBrew 
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

# 安装 git - lfs 到本机
brew install git-lfs

Brew Install Git LFS

Windows

# 下载安装 Windows installer
https://github.com/github/git-lfs/releases

# 运行 windows installer

开启 LFS 功能

首先,到达指定 git 项目文件夹,执行安装命令,开启 lfs 功能。

$ cd xxx

# 只需执行一次即可,即可开启 lfs 功能
$ git lfs install 

其次,选择您希望 Git LFS 管理的文件类型,默认会生成一个 .gitattributes 文件。

# 此处建议此种格式,可以统一关联 .zip 类型的文件(具体文件类型,视项目而定)
$ git lfs track "*.zip"

提交大文件

如果将 .gitattributes 文件和大文件一起提交,有可能会报错误:

git push origin master - error

所以此处建议分两步,优先建议先将 .gitattributes 文件提交到 git 云端上面。

$ cd xxx
$ git add .gitattributes
$ git commit -m '提交 .gitattributes 文件'
$ git push origin master

git push origin master - gitattributes

然后再次通过 Git LFS 提交大文件。

# 其中 xxx 代表大文件路径
$ git add xxx
$ git commit -m '提交 xxx 大文件'
$ git push origin master

此过程中可能会遇到如下报错:

mxgx:JJC_GoWeb jijiucheng$ git push origin master
Uploading LFS objects:   0% (0/1), 352 MB | 1.7 MB/s, done.                                                   
Post https://lfs.github.com/jijiucheng/JJC_GoWeb/objects/29642e323ee844d60b3a823c404bf80d41c5ab9bfd50bc22476850e52aaad112/verify: dial tcp 13.250.168.23:443: connect: connection refused
error: failed to push some refs to 'https://github.com/jijiucheng/JJC_GoWeb.git'

git push origin master - largeFileError

此时需要排查一些相关问题:

  • 可能是 DNS 的问题,建议添加 8.8.8.8
  • 可能是走了代理,建议把代理关闭再重试(本人此处失败就是因为这个原因);
  • 网络是否正常连接,不能出现中断的情况。

此处说明:

  • 在网上查找了一些相关资料,发现有好多都是提示使用 $ git push -u origin master$ git push -u origin master -f 指令解决的,但是本人这边验证的暂时无效,没有解决问题。

当排查完原因后,再次执行推送到远程的指令即可。

Git-LFS 常用指令

/// 查看 git-lfs 相关指令
git lfs --help
/// 查看 git-lfs 当前环境版本等信息
git lfs env
/// 查看 git-lfs 当前版本号
git lfs version
/// 查看 git-lfs 文件状态
git lfs status
/// 查看 git-lfs 文件内容填充副本
git lfs checkout
/// 查看 git-lfs 扩展信息
git lfs ext
/// 检查 git-lfs 文件一致性
git lfs fsck
/// 查看 git-lfs 命令的错误信息
git lfs logs
/// 显示 git-lfs 当前分支下所有的文件信息
git lfs ls-files

/// 安装 git-lfs 配置,只需执行一次即可,即可开启 lfs 功能
git lfs install 
/// 关闭 lfs 功能
git lfs uninstall
/// 从远程端拉取 git-lfs 文件
git lfs fetch
/// 从远处端拉取 git-lfs 文件,并标明变更文件
git lfs pull
/// 更新 git-lfs 文件
git lfs update

/// 此处建议此种格式,可以统一关联 .zip 类型的文件(具体文件类型,视项目而定)
git lfs track "*.zip"
/// 取消关联某文件
git lfs untrack "*.zip"
/// 从本地存储中删除旧的 git-lfs 文件
git lfs prune xxx
/// 对 git-lfs 文件去重(同时会显示当前分支下所有 git-lfs 文件)
git lfs dedup

/// 对 git-lfs 文件设置为 “锁定” 状态
git lfs lock xxx
/// 对 git-lfs 文件移除 “锁定” 状态
git lfs unlock xxx
/// 查看当前 git-lfs 服务器上所有 “锁定” 状态文件
git lfs locks
/// 迁移历史信息到 git-lfs 或 从 git-lfs 迁移到历史信息
git lfs migrate

参考链接

版权声明

原文作者苜蓿鬼仙(苜蓿、jijiucheng)

原文链接GitHub.io - 苜蓿鬼仙 - 【Blog】GitHub 上传超过 100MB 的大文件(git-lfs)

发表日期:2020/04/23 09:00:00

更新日期:2021/12/27 12:34:00

-

GitHubGitHub - jijiucheng

个人博客GitHub.io - 苜蓿鬼仙

小专栏小专栏 - 苜蓿鬼仙

掘金掘金 - 苜蓿鬼仙

微博微博 - 苜蓿鬼仙

公众号微信 - 苜蓿小站

小程序微信 - 苜蓿小站

文档信息

Search

    Table of Contents