You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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

火山引擎 最新活动