使用git push --mirror同步GitHub Enterprise裸仓库到空仓库失败求助
git push --mirror同步GitHub Enterprise裸仓库到空仓库失败求助
嘿,我之前处理过多分支仓库镜像同步的坑,结合你的情况给你梳理下问题和可能的解决思路:
我的操作与问题
我在GitHub Enterprise上有一个包含1611个分支的仓库,按照镜像备份的标准步骤操作:
git clone --bare https://github.myorg.com/EXAMPLE-USER/OLD-REPOSITORY.git cd OLD-REPOSITORY git push --mirror https://github.myorg.com/EXAMPLE-USER/NEW-REPOSITORY.git
但推送过程中途报错中断,远程的新仓库完全没变化,目前能看到的错误输出片段是:
Enumerating objects: 56995, done.
Counting objects: 100% (34840/34840), done.
Delta compression using up to 12 threads
Compressing objects: 100% (730/730), d...
可能的原因及解决办法
网络超时或中断:分支和对象数量这么多,很容易触发GitHub Enterprise的推送超时限制。你可以试试延长超时时间:
git push --mirror --timeout=3600 https://github.myorg.com/EXAMPLE-USER/NEW-REPOSITORY.git要是还是不行,那就分批同步,先推主分支和重要分支,再处理其他分支:
# 先同步主分支(如果是master就替换成master) git push https://github.myorg.com/EXAMPLE-USER/NEW-REPOSITORY.git main # 同步所有其他远程分支 for branch in $(git branch -a | grep -v HEAD | grep -v main); do target_branch=${branch#remotes/origin/} git push https://github.myorg.com/EXAMPLE-USER/NEW-REPOSITORY.git $target_branch:$target_branch done # 最后同步所有标签 git push --tags https://github.myorg.com/EXAMPLE-USER/NEW-REPOSITORY.git权限不足:确认你对新仓库有完整的推送权限,包括创建分支、推送标签这些操作。可以先手动创建一个测试分支推去新仓库,验证权限是否正常。
仓库存在异常对象:原仓库可能有损坏的Git对象或者超大文件,导致压缩推送中断。先检查原仓库状态:
git fsck --full如果发现损坏对象,先修复原仓库;要是有超大文件,考虑用Git LFS迁移后再同步(如果你的企业版支持LFS)。
企业版服务器限制:有些GitHub Enterprise会限制单次推送的对象数量或大小,你可以联系企业管理员确认是否有这类限制,或者如果有权限的话,在服务器本地执行同步操作,减少网络传输的影响。
备注:内容来源于stack exchange,提问作者vova25




