【Blog】GitHub 上传超过 100MB 的大文件(git-lfs)

3,319 阅读3分钟

前言

最近在 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 对大文件的支持。

GitLFS

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 指令解决的,但是本人这边验证的暂时无效,没有解决问题。

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

参考链接

版权声明

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

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

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

更新日期:2020/04/23 09:30:00

GitHubGitHub - jijiucheng

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

小专栏小专栏 - 苜蓿鬼仙

掘金掘金 - 苜蓿鬼仙

微博微博 - 苜蓿鬼仙