git上传大文件(代码片段)

兵临城下也 兵临城下也     2022-12-04     509

关键词:

最近开发项目中,使用了几个体积超过100M的第三方框架,这样导致在提交代码入库时,会被拒绝,以GitHub为例,单个文件超过50M入库会警告,超过100M会不然入库。

解决方案

1、将单个文件大于100M的文件不入库

GitHub官方解决方案

git rm --cached giant_file
# Stage our giant file for removal, but leave it on disk

git commit --amend -CHEAD
# Amend the previous commit with your change
# Simply making a new commit won't work, as you need
# to remove the file from the unpushed history as well

git push
# Push our rewritten, smaller commit

如果上面的没有解决,也可以使用下面的命令

git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch FrameworkFold/XXXFramework/xxx' --tag-name-filter cat -- --all

git commit --amend -CHEAD

git push

这样导致虽然可以入库成功,但是本地已经删除了这个大文件,项目运行起来还需要重新将大文件加入到项目中才行。GitHub也推荐使用 BGF

2、突破GitHub的限制,使用 git-lfs(Git Large File Storage) 支持单个文件超过100M

LFS 并不能像”变魔术一样”处理所有的大型数据:它需要记录并保存每一个变化。然而,这就把负担转移给了远程服务器 - 允许本地仓库保持相对的精简。

为了实现这个可能,LFS 耍了一个小把戏:它在本地仓库中并不保留所有的文件版本,而是仅根据需要提供检出版本中必需的文件。

但这引发了一个有意思的问题:如果这些庞大的文件本身没有出现在你的本地仓库中….改用什么来代替呢? LFS 保存轻量级指针中有真实的文件数据。当你用一个这样的指针去迁出一个修订版时,LFS 会很轻易地找到源文件(不在他上面可能就在服务器上,特殊缓存)然后你下载就行了。

因此,你最终只会得到你真正想要的文件 - 而不是一些你可能永远都不需要冗余数据。

# 1、安装git-lfs
brew install git-lfs

# 2、没有特别说明的情况下,LFS 不会处理大文件问题,因此,我们必须明确告诉 LFS 该处理哪些文件。将 FrameworkFold/XXXFramework/xxx的文件设置成大文件标示。
git lfs track "FrameworkFold/XXXFramework/xxx"

# 3、常规的push操作
git add .
git commit -m "add large file"
git push

追踪文件路径(标示大文件):

1、追踪单个文件:

git lfs track "FrameworkFold/XXXFramework/xxx"

或者修改仓库路径下的 .gitattributes 文件:

FrameworkFold/XXXFramework/xxx filter=lfs diff=lfs merge=lfs -text

2、追踪指定类型的文件:

git lfs track "*.exe"

3、追踪指定目录下的文件:

git lfs track "FrameworkFold/*"

相关知识

突破github的100M单个大文件上传限制

Git LFS 入门指南

Pro Git(中文版)

一些问题

1、Remote “origin” does not support the LFS locking API. Consider disabling it with

# 在最后一步push的时候
git push -u origin develop1.0
Remote "origin" does not support the LFS locking API. Consider disabling it with:
  $ git config lfs.https://git.oschina.net/harrydeng/xxx.git/info/lfs.locksverify false
Git LFS: (0 of 1 files) 0 B / 207.25 MB                                                                                                    
batch request: Access denied
exec request failed on channel 0: exit status 255
error: failed to push some refs to 'git@git.oschina.net:harrydeng/xxx.git'

解决方式:

git config lfs.https://git.oschina.net/harrydeng/xxx.git/info/lfs.locksverify false

2、batch request: Access denied

# 在最后一步push的时候
git push -u origin develop1.0
Remote "origin" does not support the LFS locking API. Consider disabling it with:
  $ git config lfs.https://git.oschina.net/harrydeng/xxx.git/info/lfs.locksverify false
Git LFS: (0 of 1 files) 0 B / 207.25 MB                                                                                                    
batch request: Access denied
exec request failed on channel 0: exit status 255
error: failed to push some refs to 'git@git.oschina.net:harrydeng/xxx.git'

解决方式:

# 删除 .git/hooks/pre-push 文件即可
That looks like a server issue with deploy keys. For now, try removing .git/hooks/pre-push.

3、GitHub 目前 Git LFS的总存储量为1G左右,超过需要付费。(上传失败时,可以开启VPN进行上传)

4、batch response: Repository or object not found

$ git lfs push origin master
Git LFS: (0 of 1 files) 0 B / 207.25 MB                                                                                                    
batch response: Repository or object not found: https://gitee.com/harrydeng/LargeFileStorage.git/info/lfs/objects/batch
Check that it exists and that you have proper access to it

失败原因:

是gitee.com这个git仓库并不支持lfs,所以在大文件入库的时候,提示失败

解决方式

目前来说,GitHub、GitLab、Coding。gitee(也就是git.oschina.net)目前还不支持。

git上传大文件(代码片段)

最近开发项目中,使用了几个体积超过100M的第三方框架,这样导致在提交代码入库时,会被拒绝,以GitHub为例,单个文件超过50M入库会警告,超过100M会不然入库。解决方案1、将单个文件大于100M的文件不... 查看详情

关于git大文件上传这件小事(代码片段)

关于Git大文件上传这件小事提交前的未雨绸缪提交后的亡羊补牢本文小结参考链接很多年后,当我在命令行中熟练地操作Git的时候,我总会不由地想起从前意气风发的自己。毕竟不知不觉间,三十岁的年龄已然被更年... 查看详情

关于git大文件上传这件小事(代码片段)

关于Git大文件上传这件小事提交前的未雨绸缪提交后的亡羊补牢本文小结参考链接很多年后,当我在命令行中熟练地操作Git的时候,我总会不由地想起从前意气风发的自己。毕竟不知不觉间,三十岁的年龄已然被更年... 查看详情

关于git大文件上传这件小事(代码片段)

关于Git大文件上传这件小事提交前的未雨绸缪提交后的亡羊补牢本文小结参考链接很多年后,当我在命令行中熟练地操作Git的时候,我总会不由地想起从前意气风发的自己。毕竟不知不觉间,三十岁的年龄已然被更年... 查看详情

git上传文件超出最大值(代码片段)

昨天在上传打包的程序的时候,git意外报错了,试了一下,并不是因为有冲突什么的,仔细看了一下报错:发现是OpenSSL中报的错,确认了一下error发现是因为上传的文件过大导致的。需要将postbuffer调整一下:gitconfighttp.postbuffer52... 查看详情

关于git大文件上传这件小事(代码片段)

关于Git大文件上传这件小事提交前的未雨绸缪提交后的亡羊补牢本文小结参考链接很多年后,当我在命令行中熟练地操作Git的时候,我总会不由地想起从前意气风发的自己。毕竟不知不觉间,三十岁的年龄已然被更年... 查看详情

git上传代码步骤(代码片段)

Git上传代码步骤第一步:建立Git仓库使用cd到本地项目的根目录下,执行git命令,此命令会在当前目录下创建一个.git文件夹。gitinit第二步:将项目所有文件添加到仓库中gitadd.该命令会把当前项目下的所有文件上传到待上传的文... 查看详情

vscode通过git上传代码(代码片段)

...不长,很多东西也是在学习,所以这里记录下VSCode通过git上传代码,以防之后忘记。我用的的VSCode版本起初建立仓库的时候通过命令:(这个是我网上搜的,应该通过图形化操作也是可用的,没有试)1234567gitinittouchREADME.mdgitaddRE... 查看详情

大文件分片上传(代码片段)

Vue项目中遇到了大文件分片上传的问题,之前用过webuploader,索性就把Vue2.0与webuploader结合起来使用,封装了一个vue的上传组件,使用起来也比较舒爽。上传就上传吧,为什么搞得那么麻烦,用分片上传?分片与并发结合,将一... 查看详情

git上传项目(代码片段)

$gitconfig--globaluser.name"xxxxxxxx"--设置名字$gitconfig--globaluser.email"xxxxxxxxxxxxx"--设置Emali不管在任何盘里创建了git文件夹,右击git文件夹,用GitBash打开$gitinit--这个目录变成Git可以管理的仓库$gitadd.--告诉Git,把文件添加到仓库,.表示所... 查看详情

使用git上传文件到云端(版本库)(代码片段)

..."(复制链接后结尾是.git,如果没有记得加.git)第三步:上传项目gitadd.--将项目中的所有文件上传git 查看详情

git----github上传本地文件到git(代码片段)

 1、首先在git上创建一个库,用来保存上传的本地文件 2、通过命令gitinit把这个目录变成git可以管理的仓库gitinit 3、将远程git库克隆一份保存到本地gitclonexxxxxxx示例:gitclonehttps://github.com/Lucky-Syw/practice.git//此链接的获... 查看详情

git上传文件夹内容(代码片段)

通过gitBashHere把文件夹上传到github前提:安装好git,鼠标右键选择1.指定目录:2.第一次上传项目(需先把GitHub仓库克隆到本地):gitclonegithub仓库如下可以快速复制自己GitHub地址:3.把项目文件夹内容添加进来:gitadd.4.commit提交... 查看详情

git上传中的排除的配置文件,git实际的操作代码;(代码片段)

git上传中的排除的配置文件:git实际的操作在主目录建立.gitignore文件并输入以下保存:*.class#packagefile*.war*.ear#kdiff3ignore*.orig#mavenignoretarget/#eclipeseignore.settings/.project.classpatch#idea.idea//idea/*.ipr*.iml*.iws#tempfil 查看详情

关于git上传文件的一个小问题(代码片段)

***Pleasetellmewhoyouare.Rungitconfig--globaluser.email"[email protected]"gitconfig--globaluser.name"YourName"tosetyouraccount‘sdefaultidentity.Omit--globaltosettheidentityonlyinthisrepository.&n 查看详情

大文件上传(代码片段)

首先先要建好几个文件html里面代码1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<title>文件上传</title>6<scriptsrc="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"& 查看详情

git无法上传空文件夹分析(代码片段)

...itpush之后,远程仓库缺了文件夹,查资料后发现git是不能上传空文件的,解决方法是在每个空文件夹内放入一个无意义文件,这样空文件夹就不是“空”文件夹了,等到我们不需要的时候,可以把无意义文件删掉,从而达到上传... 查看详情

gitbash命令行上传git项目(代码片段)

使用gitinit命令初始化Git仓库,使此项目文件夹成为Git可以管理的仓库gitinit使用gitadd.命令把项目文件添加到暂存区里面,不要忘记后面的小数点“.”,意为添加文件夹下的所有文件gitadd.使用gitcommit命令告诉Git,把文件提交到仓... 查看详情