跳到主要内容

从 GitHub / GitLab 迁移:搬代码只是第一步

迁移最容易被低估的地方:代码搬过来十分钟,周边配置对不上要一星期。

这篇按「先搬什么 → 怎么搬 → 搬完改什么」走。

一、先决定搬多重​

三种粒度,成本差一个数量级:

粒度做法适合
只搬代码git push --mirror试水、个人项目
代码 + 制品加制品迁移工具有内部包依赖
代码 + 制品 + 协同数据加项目协同迁移工具团队整体搬迁

别一上来就全量搬。先搬一个仓库跑通流水线,再批量。

二、只搬代码:--mirror 最快​

保留全部分支和标签的历史:

# 1. 克隆裸仓库
git clone --bare https://github.com/example/example-repo.git

# 2. 推送到 CNB,--mirror 同步所有分支与标签
cd example-repo.git
git push --mirror https://cnb.cool/my-group/example-repo.git

# 3. 清理
cd .. && rm -rf example-repo.git

只想搬某个分支,普通 clone 后逐个 git push 即可,不必上 --mirror。

:::tip 一个必须提前确认的点 CNB 默认分支通常是 main,从其他平台迁移的仓库可能是 master。 搬之前想好要不要统一——因为 .cnb.yml 的顶层键名就是分支名,写错了流水线一条都不跑。 :::

三、批量搬:Code Import​

仓库一多,手敲 --mirror 不现实。官方工具是 CNB Code Import,支持从 GitHub、GitLab、Gitee 等平台批量导入。

工具地址:cnb/plugins/cnbcool/code-import

典型的批量场景是几十上百个仓库一次性搬,这时候要看的是:导入失败的仓库有没有清单、中断了能不能续。

四、不搬,而是保持同步:Git Sync​

有些团队没法一刀切。老平台还要用一阵,新平台先并行。

Git Sync 是跨平台同步插件,把一边的变更自动同步到另一边。工具地址:cnb/plugins/tencentcom/git-sync。

用它的前提是想清楚谁是主:单向同步(老 → 新)安全,双向同步冲突处理会很痛苦。

五、制品也要搬​

从其他制品仓库迁 Maven、npm、Composer、NuGet 类型制品到 CNB,用 artifact-migrate:

cnb/plugins/cnbcool/artifact-migrate

这一步经常被跳过,然后在新平台上第一次构建就挂——因为依赖拉不到。

六、协同数据​

CODING 的项目协同数据可以迁到 TAPD 或 CNB,工具:CODING/tool/migrate-collaboration。

GitHub 的 Issue / PR 没有官方一键工具,通常的做法是导出 JSON 再脚本化写进 CNB 的 Issue(CLI 能批量建)。

七、搬完必改清单​

这部分是真正的成本所在。逐条对:

要改的东西为什么
本地 git remote 地址老地址推不上去
.cnb.yml 里的硬编码仓库路径组织名变了就失效
CI 里引用的镜像地址私有镜像仓库换了
imports 引用的密钥仓库路径密钥没搬 = 构建起不来
分支保护规则不在 git 里,得重新配,容易忘
组织成员与角色权限模型不一样,别照搬
Webhook / 外部集成回调地址指向旧平台的要改
徽章链接README 里的图片会 404

:::tip 先配密钥仓库 迁移后第一次构建失败,八成是环境变量没了。把密钥仓库建好、imports 改对,再跑第一次构建。 :::

八、迁移后的验收标准​

别用「能克隆」当成功。真正的标准是:

  1. 默认分支的 push 流水线能跑通
  2. 能开 PR 且 PR 流水线能跑
  3. 制品能拉能推
  4. 分支保护生效(试着直推主干,应该被拒)

四条全过,才算搬完。

下一篇是这套教程的收尾:把所有高频问题串成一张排查地图。