You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移GHES至GHEC:如何在本地镜像仓库编辑分支保护规则?

解决GHES到GHEC迁移中的分支保护与分支重命名问题

核心认知:分支保护规则不在Git镜像仓库里

分支保护规则是GitHub平台的仓库级配置,不属于Git仓库本身的版本控制数据(比如分支、提交、标签这些)。git clone --mirror只会克隆Git层面的内容,所以本地镜像仓库里根本找不到分支保护规则的存储位置——它原本就不在那里。


一、迁移分支保护规则的正确方式

方法1:用GitHub API批量迁移

  1. 先导出GHES上目标仓库的分支保护配置(以master分支为例):
    # 先登录GHES的gh cli
    gh auth login --hostname YOUR_GHES_DOMAIN
    # 导出master分支的保护规则到json文件
    gh api repos/OWNER/REPO/branches/master/protection > branch-protection.json
    
  2. 再将配置导入到GHEC的目标仓库(如果已经重命名分支为main,就替换分支名):
    # 登录GHEC的gh cli
    gh auth login
    # 导入配置到main分支
    gh api -X PUT repos/OWNER/REPO/branches/main/protection -f @branch-protection.json
    

方法2:用GitHub Enterprise Importer(GEI)

官方提供的GEI工具可以一站式迁移仓库,包括分支保护、权限、webhook等所有平台级配置,比手动用API更省心,适合单仓库或批量迁移。操作逻辑是:

  • 在GHEC端发起迁移,选择GHES作为源,按向导完成配置,工具会自动同步所有分支保护规则到目标仓库。

二、安全重命名master为main并避免报错

直接在裸镜像仓库重命名分支触发删除报错,是因为分支保护规则限制了分支删除。按以下步骤操作:

  1. 将裸镜像仓库转为普通仓库(方便操作):
    git clone --mirror YOUR_GHES_REPO_URL temp-repo
    cd temp-repo
    git config --bool core.bare false
    git checkout master
    
  2. 重命名分支并推送至GHEC:
    git branch -m master main
    # 添加GHEC仓库作为远程
    git remote add ghec YOUR_GHEC_REPO_URL
    # 推送main分支
    git push ghec main:main
    
  3. 处理GHEC端的分支保护与默认分支:
    • 在GHEC仓库设置中,将默认分支改为main
    • 给main分支配置好分支保护规则(用上面的API或GEI方法)
    • 取消master分支的保护规则(如果之前推送了master的话)
  4. 删除GHEC端的master分支(可选):
    git push ghec --delete master
    
  5. 如果需要保持镜像同步:回到裸镜像仓库,执行git branch -m master main,再重新git push --mirror GHEC_URL,此时推送的就是main分支而非master。

内容的提问来源于stack exchange,提问作者Underoos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:15:44