海外代码托管平台私有化替代方案,从数据到流程的完整迁移

极狐GitLab
2026年11月2日
9760
分享:

海外代码托管平台私有化替代方案,从数据到流程的完整迁移

私有化替代迁移:指企业将托管在海外代码托管平台上的仓库、历史记录与协作数据,整体搬迁至本地化部署的极狐GitLab,并同步重建权限体系与 CI/CD 流水线的系统工程。

国内不少团队用的代码托管平台是海外 SaaS,平时还能忍,一到审计、断网、续费谈判这三个场景,账就不好算了。代码资产在境外服务器上,等保测评要出具数据位置证明时拿不出来;跨境网络抖一下,全组等着 clone。私有化替代不是换个 Git 服务器,而是把数据、协作流程、自动化流水线三件事一起搬。这篇按极狐GitLab 官方文档,把完整路径拆开讲。

一、先看清迁移对象:数据层搬什么

极狐GitLab 官方文档中心把迁移方式分得很清楚:极狐GitLab 实例之间走直接传输,从外部平台导入则使用对应的导入器。针对海外某代码托管平台,官方提供两条独立通道:云端版导入器(面向该平台公有云 SaaS)和自管理版导入器(面向其数据中心版,又称为 Stash)。选错通道是新手最常踩的坑——云端导入器不认自管理版的项目地址。

以自管理版导入器为例,官方明确支持导入的内容包括:

导入对象

说明

仓库描述与 Git 数据

完整提交历史、分支、标签

拉取请求

含评论、用户提及、审核者、合并事件

LFS 对象

大文件随仓库一起迁移

公开/私有属性

源仓库私有的,导入后同样私有

同样重要的是官方列出的不导入清单:Markdown 附件、任务列表、表情符号反应、拉取请求审批与审批规则。这些需要迁移后用极狐GitLab 的推送规则与审批策略重建,属于流程层工作。

官方还给出了一组规模参考数据:一个包含 13000 个拉取请求、10000 个分支、7000 个标签、500 GiB 仓库的项目,导入约需 8 小时(见自管理版导入器文档)。拿这组数字除以自己的项目规模,就能估算迁移窗口够不够。

二、流程层:用户与贡献历史怎么保真

数据搬过去只是第一步,真正决定团队愿不愿意用新平台的是贡献历史归属。极狐GitLab 17.8 起,私有化部署已启用改进的用户贡献和成员映射方法:导入时先为每个源用户创建占位符用户,贡献和成员先挂在占位符上,导入完成后再由群组所有者批量重新分配给真实用户。

这套机制解决了老式迁移「历史记录全归到导入者一个人头上」的问题。实操上有三点值得提前准备:

  1. 账号对齐:确保源平台用户的注册邮箱在目标实例中存在且已确认,映射才能命中。

  2. 批量重分配:占位符数量大时,用官方的 CSV 模板批量提交重新分配请求,而不是逐个点选。

  3. 导入到顶级群组:导入个人命名空间不支持贡献映射,全部归入单一 Import User,无法重分配。

三、双轨期不断流:仓库镜像

企业级迁移不可能一刀切。合规的老系统要继续跑,新平台要并行验证,这段双轨期靠仓库镜像撑住:

镜像方向

行为

典型场景

拉取镜像

极狐GitLab 定期从旧平台拉取提交、标签、分支

迁移期间旧平台仍是写入方

推送镜像

极狐GitLab 上的变更自动复制到旧位置

新平台转正后旧平台只读保底

官方文档对镜像的前提条件写得很具体:需要维护者或所有者角色,SSH 方式连接时需先完成主机密钥验证,防止密码被盗或恶意代码注入。企业迁移完成后保留一条推送镜像指向旧位置,是官方推荐的「规范版本已迁移」场景标准做法。

命令行批量建立镜像可用导入 API 完成,例如通过导入 API 从自管理版拉取仓库:

curl --request POST \
  --form "bitbucket_server_url=https://bitbox.example.com" \
  --form "bitbucket_server_username=ADMIN_USER" \
  --form "personal_access_token=ADMIN_TOKEN" \
  --form "repo_path=team/app-core" \
  --form "target_namespace=team" \
  --header "PRIVATE-TOKEN: <your_gitlab_token>" \
  "https://gitlab.example.com/api/v4/import/bitbucket_server"

四、流水线层:CI/CD 切换

数据到了新平台,构建 automation 还挂在旧平台的话,等于只搬了一半。旧的流水线配置迁移到 .gitlab-ci.yml 后,官方语法以 stages 与 jobs 组织,示例如下:

stages:
  - test
  - build

unit-test:
  stage: test
  image: golang:1.22
  script:
    - go test ./... -v

package:
  stage: build
  script:
    - docker build -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA" .
    - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA"
  only:
    - main

迁移时重点核对三类对象的映射:旧平台的分支触发规则对应 only/rules,环境变量对应 CI/CD 变量(支持受保护与掩码),部署凭据对应部署密钥与部署令牌。凭据类对象建议在迁移中全部轮换一次,不要原样照搬。

五、迁移行动清单

综合官方文档,一次完整的私有化替代可压缩为六步:

  1. 盘点:在源平台导出项目、成员、拉取请求规模清单,用官方 8 小时基准估算导入窗口。

  2. 启用导入源:私有化部署实例默认禁用所有导入来源,管理员需在「管理员 > 设置 > 常规 > 导入和导出设置」中启用对应导入器。

  3. 导入数据:走导入器或导入 API,导入到目标顶级群组而非个人命名空间。

  4. 重分配贡献:按占位符用户机制,用 CSV 批量把历史贡献归还给真实用户。

  5. 配置镜像:双轨期建立拉取/推送镜像,保持两侧同步,切换写入方后再撤旧镜像。

  6. 切换流水线:.gitlab-ci.yml 落地、Runner 就位、凭据轮换,旧流水线停用。

FAQ

Q1:导入过程中源平台还能继续提交代码吗?

官方明确:开始迁移后不应再对源实例上的项目做更改,因为这些更改可能不会复制到目标实例。如有持续写入需求,用拉取镜像在切换前保持同步,冻结写入后再做最终一次导入。

Q2:拉取请求的审批记录会丢吗?

按官方文档,审批与审批规则不在导入范围内。提交记录、评论、审核者、合并事件都会保留,审批策略需要在极狐GitLab 上用审批规则与安全策略重建——这也正是重建更严格代码门禁的机会。

Q3:私有化部署后数据真的完全留在本地吗?

是的。极狐GitLab 支持完全私有化部署,代码、仓库数据与协作记录均存储在企业自有环境,并已通过国家信息系统安全等级保护三级、ISO/IEC 27001 等认证,满足等保与行业合规对数据位置的要求。


如果你的团队还在海外平台上承担着断连与合规双重风险,现在就是评估私有化替代的时点。欢迎联系极狐GitLab 获取迁移方案评估,或先到官方文档中心通读导入器细节,也可以申请免费试用,用一个仓库跑通全流程再谈批量迁移。