目录
1.背景
最近将托管在gitee.com上代码放到github.com上,通过github网站从gitee.com直接导入github提示失败,具体请原因位置。之后从命令上手动导入,出现了一下问题记录下来,以供参考。
2.导入
2.1 删除远程仓库gitee.com
$ git remote rm origin
2.2 增加远程仓库github.com
$ git remote add origin https://github.com/flysnow010/flyscp.git
说明:
- 远程仓库flyscp.git是在github创建的一个空仓库
2.3 切换到main分支
$ git branch -M main
2.4 推送到远程分支
$ git push -u origin main
就在推送到最后出问题,问题如下:
$ git push -u -f origin main
Enumerating objects: 2720, done.
Counting objects: 100% (2720/2720), done.
Delta compression using up to 16 threads
Compressing objects: 100% (772/772), done.
Writing objects: 100% (2720/2720), 138.06 MiB | 4.47 MiB/s, done.
Total 2720 (delta 1916), reused 2720 (delta 1916), pack-reused 0
remote: Resolving deltas: 100% (1916/1916), done.
remote: error: Trace: 5cf2bc7a226754a731ec4fa76e04b16f1a5384db29e8967f7cbb6c0b6c4ba850
remote: error: See https://gh.io/lfs for more information.
remote: error: File doc/windows-win32-shell.pdf is 123.69 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: File doc/windows-win32-shell_en.pdf is 116.72 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
To https://github.com/flysnow010/flyscp.git
! [remote rejected] main -> main (pre-receive hook declined)
error: failed to push some refs to 'https://github.com/flysnow010/flyscp.git'
从错误去信息看是doc目录下有两个文件windows-win32-shell.pdf和doc/windows-win32-shell_en.pdf大小超过100MB。
通过如下命令删除两个文件:
git rm doc/windows-win32-shell.pdf
git rm doc/windows-win32-shell_en.pdf
git commit -m "rm big file"
再次提交时还是出现上述问题。
3问题解决
3.1 尝试1
怀疑本地有缓冲,重新下载代码删除两个文件后,再上传:
$ git clone https://gitee.com/flysnow_1/flyscp.git
$ cd flyscp
$ git remote rm origin
$ git remote add origin https://github.com/flysnow010/flyscp.git
$ git branch -M main
$ git push -u origin main
问题依旧。
3.2 尝试2
怀疑远程有缓存,增加选项-f强制覆盖远程。
$ git push -u -f origin main
问题依旧。
3.3 尝试3
最后考虑到,随然再当前版本中删除两个大文件,但历史版本中还存在这两个文件,看来需要从历史版本中删除这个两文件。
从历史版本中删除文件:
$ git filter-branch --force --index-filter \
> "git rm --cached --ignore-unmatch doc/windows-win32-shell.pdf" \
> --prune-empty --tag-name-filter cat -- --all
运行结果:
WARNING: git-filter-branch has a glut of gotchas generating mangled history
rewrites. Hit Ctrl-C before proceeding to abort, then use an
alternative filtering tool such as 'git filter-repo'
(https://github.com/newren/git-filter-repo/) instead. See the
filter-branch manual page for more details; to squelch this warning,
set FILTER_BRANCH_SQUELCH_WARNING=1.
Proceeding with filter-branch...
Rewrite 36a840451c2057f8eddef65f653d74fa5e59712d (67/406) (36 seconds passed, remaining 182 predicted) rm 'doc/windows-win32-shell.pdf'
Rewrite 463481753d6d19e5c59efcd12d7648e83476f428 (69/406) (37 seconds passed, remaining 180 predicted) rm 'doc/windows-win32-shell.pdf'
Rewrite 6190fd4f218d742d231dfe46f6e2c6fb069c43da (69/406) (37 seconds passed, remaining 180 predicted) rm 'doc/windows-win32-shell.pdf'
Rewrite 711e116b1a581df68bd53f4354e0642f08112f54 (71/406) (38 seconds passed, remaining 179 predicted) rm 'doc/windows-win32-shell.pdf'
Rewrite 9ef306ab2d0af696fde3addbfa2f6b06566bb1ad (71/406) (38 seconds passed, remaining 179 predicted) rm 'doc/windows-win32-shell.pdf'
Rewrite 97e232f44c5014cb174342a4a3f0309affef99c1 (73/406) (39 seconds passed, remaining 177 predicted) rm 'doc/windows-win32-shell.pdf'
Rewrite cc485fdc99e222822ffdd27b0b1a8dc170e1f473 (73/406) (39 seconds passed, remaining 177 predicted) rm 'doc/windows-win32-shell.pdf'
Rewrite ff0c50789afc7321cd9683a2fd74144ddfbe6a9c (75/406) (40 seconds passed, remaining 176 predicted) rm 'doc/windows-win32-shell.pdf'
Rewrite 11c08e799c3308886dddf085be5cc6648e598421 (75/406) (40 seconds passed, remaining 176 predicted) rm 'doc/windows-win32-shell.pdf'
...
Rewrite 4bef6e154efa71ae30745eebde31dce12fc42980 (405/406) (226 seconds passed, remaining 0 predicted)
Ref 'refs/heads/main' was rewritten
看来使用这个命令导致历史库被重新修改了
用同样命令删除另一个文件:
$ git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch doc/windows-win32-shell_en.pdf" \
--prune-empty --tag-name-filter cat -- --all
3.4 问题解决
$ git push -u origin main
运行结果:
$ push -u -f origin main
Enumerating objects: 2712, done.
Counting objects: 100% (2712/2712), done.
Delta compression using up to 16 threads
Compressing objects: 100% (1096/1096), done.
Writing objects: 100% (2712/2712), 65.27 MiB | 4.23 MiB/s, done.
Total 2712 (delta 1908), reused 1972 (delta 1584), pack-reused 0
remote: Resolving deltas: 100% (1908/1908), done.
To https://github.com/flysnow010/flyscp.git
* [new branch] main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
代码成功推送上去了。
4 总结
- github对文件大小有限制不能超过100M.
- 从历史版本中删除文件会导致设计到整个历史版本信息被修改,慎重使用。