20240206_github大文件commit
关于在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)
(如果是https的remote 可能有所不同。)错误提示如下:
为解决该问题,需要作以下动作进行提交:
2. 使用Git Large File Storage插件
2.1 插件二进制下载地址:
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的状态:
2.6 再次执行正常的本地提交与push
1git commit -m "add 100MB+ binary file by lfs"
2git add .
3git commit
4git push origin main
2.7github上查看这次的提交
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
2、
3、
4、
5、
6、
7、
8、
9、
10、
这里本地因为是github的上回滚,其实不操作也没有问题。
11、
看到此时的ID已经变了,回滚与我本地是一致的。都为75f44e8
12、题外话:
github上的这种曲线救国方法在gitlab上就不需要这么麻烦的操作,因为gitlab默认有web操作的回滚功能:具体位置为:Commits-》点击具体的某次提交后-》Options-》Revert 如图:
- 原文作者:Kid
- 原文链接:https://shuanglu.life/post/20240206_github%E5%A4%A7%E6%96%87%E4%BB%B6commit/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。