ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[git] 上传大于100M的文件到github远程仓库中

2021-10-10 15:34:06  阅读:233  来源: 互联网

标签:文件 100M git github lfs push pdf


一、摘要

github是全球最大的代码托管平台,我门常常需要将自己本地的代码仓库上传到github远程仓库中。对于单个文件大小小于100M的文件,在网络良好的情况下可以顺利的上传到github远程仓库中。但是某些情况下,我们需要上传大于100M大小的文件,例如程序文档、演示视频等,而github平台对文件大小进行了限制,直接使用git push origin master或其他IDE内置的git工具push 会产生remote: error: GH001:Large files detected. You may want to try Git Large File Storage - ...错误,如下图所示。为了成功上传大于100M的文件到github中,需要使用Git LFS工具。

remote:error:GH001
本文第二部分介绍了如何使用Git LFS上传大文件到github中的方法,包括:

  1. 已经知道大文件(为了叙述方便,本文将大于100M大小的文件称为大文件)的存在时,如何操作将包含大文件的本地仓库push到github;
  2. 在push后发生remote:error:GH001错误时解决方法;

本文要求读者的电脑上已经安装配置好git,并且读者已经掌握git的基本操作,包括add,commit,remote add,push等命令的使用。

二、解决方法

1. 已知大文件的存在,push大文件到github的方法

假设我们的本地代码仓库已经初始完成,并且已经设置好远程仓库地址。现在突然要在本地仓库中添加一个大文件 A.pdf,此时的A.pdf还为添加到暂存区中过,可以按照以下步骤将A.pdf添加到代码仓库,并push到github远程仓库。

(1). 下载安装Git LFS

在Git LFS官网Git Large File Storage上下载Git LFS客户端并安装。

(2). 在git仓库中启用lfs并track大文件A.pdf

在本地仓库目录下输入以下命令:

# 启用 git lfs
git lfs install

运行后会显示:

Updated git hooks.
Git LFS initialized. 

使用git lfs跟踪大文件A.pdf:

# 使用git lfs跟踪大文件A.pdf
git lfs track A.pdf

此时git lfs会在本地代码仓库文件目录下生成一个隐藏文件.gitattributes,查看.gitattributes显示内容如下:

cat .gitattributes
A.pdf filter=lfs diff=lfs merge=lfs -text  

(3). 将大文件.gitattributes添加到代码区,并push到远程代码仓库

# 将A.pdf和.gitattributes添加到暂存区
git add A.pdf 
git add .gitattributes
# commit暂存区内容
git commit -m "Add A.pdf and .gitattributes ."
# push到远程github仓库
git push origin master

此时即可将大文件A.pdf push到github远程仓库中。

2. push时产生remote:error:GH001错误的解决方案

还有一种情况是我们原本不知道本地文件A.pdf大于100M,在git add A.pdfgit commit之后git push origin master时显示remote:error:GH001...错误,这时我们即使再按照 1. 中步骤操作也会显示remote:error:GH001...错误,这是因为在之前的commit中已经将A.pdf添加到仓库中,隐藏文件夹.git下已经有A.pdf的目标文件,即使之后使用git lfs track等操作也不会改变之前commit的状态。

(1). 知道未提交大文件A.pdf的最后一次commit时的方法

此时我们可以使用reset命令回到提交A.pdf文件之前的状态,然后再按照1. 中的步骤使用git lfs添加大文件A.pdf。(注意!!!reset命令会使git回退到指定的版本,在指定版本之后的提交都会清空)。
步骤如下:

git reset ******(此处填未提交A.pdf时的commit状态哈希值,可以只填前6位)
# 启用 git lfs
git lfs install
# 使用git lfs跟踪大文件A.pdf
git lfs track A.pdf
# 将A.pdf和.gitattributes添加到暂存区
git add A.pdf 
git add .gitattributes
# commit暂存区内容
git commit -m "Add A.pdf and .gitattributes ."
# push到远程github仓库
git push origin master

(2). 不确定未提交大文件A.pdf的最后一次commit时的方法

此时可以将A.pdf文件删除,重写commit并清理回收空间后在使用git lfs添加A.pdf大文件。命令如下:

git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch A.pdf' --prune-empty --tag-name-filter cat -- --all

如果此时报错:

Cannot rewrite branches: Your index contains uncommitted changes.

使用如下命令解决:

git stash

清理和回收空间

rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now

三、参考

[1]. GitHub大文件(大于100M)上传
[2]. GitHub 上传文件过大报错:remote: error: GH001: Large files detected.
[3]. GitHub限制上传单个大于100M的大文件
[4]. Git清理删除历史提交文件

标签:文件,100M,git,github,lfs,push,pdf
来源: https://blog.csdn.net/Strengthennn/article/details/120679364

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有