关于在github上遇到上传的单个文件超过其限制的100MB时的处理

1. github 对于单个文件上传的大小是有限制的

详见:[About size limits on GitHub][https://docs.github.com/en/repositories/working-with-files/managing-large-files/about-large-files-on-github#about-size-limits-on-github]

其表现则体现为push过程当中的错误(我这里使用的是git的remote,而非http的remote)

image-20240206164631827

(如果是https的remote 可能有所不同。)错误提示如下:

image-20240206164620257

为解决该问题,需要作以下动作进行提交:

2. 使用Git Large File Storage插件

2.1 插件二进制下载地址:

https://git-lfs.com/

2.2 直接双击安装后,本地执行

1# git lfs install

2.3 添加需要lfs追踪的文件。

1# 这里我的文件是deb的二进制包
2# git lfs track "*.deb"
3# 此时会在git目录下生成.gitattributes 配置文件
4# cat .gitattributes
5*.deb filter=lfs diff=lfs merge=lfs -text

2.4 由于之前提交过了,因此此时需要reset 上一次的提交

 1#  git log
 2commit 037ab6ab328f1ecff8ec52673f4afd29803c2cf0 (HEAD -> main)
 3Author: DESKTOP-T6H0I1V\kid <263587092@qq.com>
 4Date:   Tue Feb 6 16:28:12 2024 +0800
 5
 6    fix 3 add bin
 7
 8commit 75f44e840e40d47e15422ab73601b987da267c88 (origin/main, origin/HEAD)
 9Author: Shuanglu <263587092@qq.com>
10Date:   Wed Jan 31 20:43:39 2024 +0800
11
12    fix 2  README.md
13
14commit d0f529289997c60645bcc72041c99665780f1207
15Author: Shuanglu <263587092@qq.com>
16Date:   Wed Jan 31 20:38:41 2024 +0800
17
18    fix 1  README.md
19
20commit d0ad352f4d0ab4c762d536ebd245453c2046142a
21Author: Shuanglu <263587092@qq.com>
22Date:   Wed Jan 31 20:35:57 2024 +0800
23
24    fix README.md
25
26commit 41560535606589ede2a9060d3c51c36eed9ae8c1
27Author: Shuanglu <263587092@qq.com>
28Date:   Wed Jan 31 20:21:03 2024 +0800
29
30    第一次提交
31
32commit 05ce55ef928c1fa65c53e3ffa809003980a55de0
33Author: Shuanglu <263587092@qq.com>
34Date:   Wed Jan 31 20:18:49 2024 +0800
35
36    first commit
37# 这里使用强制reset的行为,并且使用--soft的方式,此时刚生成的.gitattributes也会保留下来
38# git reset  --soft 75f44e840e40d47e15422ab73601b987da267c88
39# 需要注意的是:如果使用--hard 也可以。--hard 会删除源文件,此时.gitattributes 和最早 cp -av ~/Downloads/odoo_16.0.latest_all.deb  ./bin/ 命令保存过来的 deb包也会删除,则需要再次执行#  git lfs track "*.deb"

2.5 此时git的状态:

image-20240206185007197

2.6 再次执行正常的本地提交与push

image-20240206193436681

1git commit -m "add 100MB+ binary file by lfs"
2git add .
3git commit 
4git push origin main 

2.7github上查看这次的提交

image-20240206193540617

image-20240206193557744

PS:

1、关于错误回滚的回撤行为

 1# 正常的回滚使用git log --pretty=oneline 查看所有的hash提交过程
 2# 再使用 git reset --soft xxxxxhashxxxxxx 进行回滚操作
 3# 但是如果此操作发现回滚错误,则需要撤销回滚,则需要借助 git reflog 命令查看完整的commit 过程
 4# 此处 结尾c88的提交是上一次回滚错误的提交。
 5# 如果要撤销这次回滚操作
 6# git reflog --no-abbrev
 775f44e840e40d47e15422ab73601b987da267c88 (HEAD -> main) HEAD@{0}: reset: moving to 75f44e840e40d47e15422ab73601b987da267c88
 803493bd35520a8a5a798173a31c3f0a98f2fbcc8 (origin/main, origin/HEAD) HEAD@{1}: commit: fix3 add bin
 975f44e840e40d47e15422ab73601b987da267c88 (HEAD -> main) HEAD@{2}: reset: moving to 75f44e840e40d47e15422ab73601b987da267c88
10037ab6ab328f1ecff8ec52673f4afd29803c2cf0 HEAD@{3}: commit: fix 3 add bin
1175f44e840e40d47e15422ab73601b987da267c88 (HEAD -> main) HEAD@{4}: clone: from github.com:ssslkj123/odoo-16.git
12# 如果是hard 则会保持强一致性,删除与该当前版本不一样的文件。
13# 如果是soft。当撤销回滚后,差异性的文件,则会以未add 的形似继续保持在当前状态中。
14# git reset --hard 03493bd35520a8a5a798173a31c3f0a98f2fbcc8

2、有关Github上的RollBack功能

github上没有针对某次提交的rollback 功能,因此在web页面上只能够使用曲线救国的方式,如果是有git客户端,则可以直接使用git push -f -u origin main 强制覆盖到远程的github来进行操作。否则使用如下方式:

1、查看commits

image-20240206191200434-17072179216623.png

2、

image-20240206191301182-17072179820425.png

3、

4、

5、

6、

7、

8、

9、

10、

这里本地因为是github的上回滚,其实不操作也没有问题。

11、

看到此时的ID已经变了,回滚与我本地是一致的。都为75f44e8

image-20240206192621697

image-20240206192655406

12、题外话:

github上的这种曲线救国方法在gitlab上就不需要这么麻烦的操作,因为gitlab默认有web操作的回滚功能:具体位置为:Commits-》点击具体的某次提交后-》Options-》Revert 如图:

img