从企业级集中式版本管理迁移Git,极狐GitLab迁移路径与大文件治理

极狐GitLab
2026年11月5日
8450
分享:

从企业级集中式版本管理迁移Git,极狐GitLab迁移路径与大文件治理

定义框:版本管理迁移,是指把代码、提交历史、分支与标签从集中式版本控制系统完整搬到 Git 仓库,并在新平台上重建协作与流水线的过程。

过去十几年,大量游戏、芯片设计、汽车电子团队把核心资产放在企业级集中式版本管理系统中——单仓海量二进制、粗粒度锁、按检出数计费。当远程协作变多、CI/CD 变重,这套架构的账就越来越难算:中央服务器是唯一副本,带宽成本随团队线性上涨,流水线拉一次代码要等十几分钟。迁移到 Git 生态不是赶时髦,而是把版本资产从「机房资产」变成「可复制、可容灾、可自动化的工程资产」。

但迁移从来不是 git init 一敲就完事。真正的难点有两个:历史怎么办,以及大文件怎么办。本文基于极狐GitLab 官方文档,把这两个问题拆开讲清。

一、三条迁移路径,先选对再动手

官方文档给出过针对集中式系统的迁移方法论(可参考从SVN迁移到极狐GitLab的通用思路),落到企业级集中式版本管理系统上,通常有三条路径可选:

路径

适用场景

核心动作

风险点

一次性全量导入

小团队、历史包袱轻

用桥接工具全量转换历史后切换

切换窗口内停止提交

双轨镜像并行

大团队、不允许停线

旧系统只读,推送镜像保持同步

两套权限需人工对齐

分批按项目迁移

多产品线、风险隔离

按项目逐个迁移,逐个验证

跨项目依赖需临时桥接

其中双轨并行是工程上最稳的做法:迁移期间旧系统设为只读,在极狐GitLab 上配置仓库镜像保持双向同步,验证期结束再硬切换。官方文档明确:推送镜像的变更会在数分钟内到达下游,拉取镜像按固定间隔自动同步——这个窗口足够大多数团队的日清节奏。

二、第一步:历史导入,别把人名迁丢

Git 官方自带 git p4 桥接命令,可以把集中式仓库的完整提交历史转为 Git 仓库。基本形态:

# 全量克隆 depot 中的 main 流,@all 表示保留全部变更集
git p4 clone --destination . //depot/main@all

# 转换完成后推送至极狐GitLab
git remote add origin git@example.com:group/project.git
git push origin --all
git push origin --tags

导入环节最容易踩的三个坑:

  1. 作者映射缺失。集中式系统的用户与邮箱体系不同,不做映射会出现一堆「无名氏」提交,MR 的责任人追溯直接失效。务必提前生成用户映射文件。

  2. 变更集编号丢失。旧系统里的 changelist 编号建议写入提交信息,方便审计期回查对照。

  3. 跨仓库依赖。集中式系统常把多个产品放在一个 depot 下,迁移时按项目拆分,拆不动的先用镜像桥接过渡。

如果需要以 API 方式批量建项目、灌数据,可使用官方导入 API;企业用户体系对接中出现的映射用户,官方文档也有占位符用户机制专门处理。

三、第二步:大文件治理,LFS 是分水岭

集中式系统对大二进制是「中央存储、按需检出」,Git 则是「每个克隆携带全量历史」。美术资源、固件镜像、测试样本这类文件直接进 Git 仓库,克隆体积会随历史线性膨胀,最终拖垮 clone、fetch、pull。

Git 大文件存储(LFS)就是官方给的正解:它是一个开源 Git 扩展,把大文件存入对象存储,仓库里只留一个文本指针。官方文档给出的指针结构如下:

version https://git-lfs.github.com/spec/v1
oid sha256:lpca0iva5kpz9wva5rgsqsicxrxrkbjr0bh4sy6rz08g2c4tyc441rto5j5bctit
size 804

极狐GitLab 私有化部署与 JihuLab.com 默认启用 Git LFS。迁移时在仓库根目录执行:

git lfs install          # 写入 pre-push 钩子与 .gitattributes
git lfs track "*.psd"    # 按类型声明纳管,务必在根目录 .gitattributes 声明
git lfs migrate import --everything --include="*.psd,*.mp4"  # 历史中的大文件转入 LFS

三类要点,官方文档原文可查:

  1. 必须在项目根目录维护 .gitattributes,只在子目录配置会在 UI 触发配置警告;

  2. 17.2 及以上版本已引入 LFS 的纯 SSH 传输协议支持,SSH 克隆场景不再强制回退 HTTPS 认证;

  3. 历史迁移用 git-lfs-migrate,它会重写历史——动手前先备份,并通知全员重新克隆。

四、第三步:瘦身验证,确认账算清了

迁移完成后,用官方口径核对仓库体积:极狐GitLab 的仓库大小计算类似对哈希存储路径执行 du --summarize --bytes,仓库变更后每 15 分钟最多重算一次,在设置 > 使用配额 > 存储中查看。若仓库大小逼近管理员设定的限制,推送、创建合并请求、上传 LFS 对象都会受限——这正是迁移期瘦身的价值所在。

治理手段

官方工具

是否可逆

典型用途

历史清除文件

git filter-repo

不可逆

剔除历史中的大文件

仓库清理

设置 > 代码仓库维护

不可逆

移除未引用对象、重算大小

移除 blob

设置 > 代码仓库维护

不可逆

清除敏感或误提交内容

五步验证清单,逐项打勾再宣布迁移完成:

  1. 提交数与标签数与旧系统变更集数对账一致;

  2. git log 抽查 10 个关键版本,作者与内容正确;

  3. LFS 对象可拉取,克隆体积降至预期量级;

  4. CI 流水线在新仓库上全绿跑通一轮;

  5. 旧系统设为只读归档,镜像停用,仅保留审计期访问。

五、什么时候别急着迁

两句实话:还在频繁使用文件锁、且无法接受「大文件进 LFS 后锁行为改变」的纯美术仓,可以先不迁,用镜像桥接观察;已经停止维护的历史项目,导出归档比迁移更省钱。迁移的收益来自活跃协作资产,不是仓库存货。

FAQ

Q1:迁移后旧系统的变更集编号还能追溯吗?

可以。git p4 会把变更集信息写入提交信息,审计期直接在 git log 中检索编号即可。若需要更细的双向追溯,可在过渡期保留只读镜像对照查询。

Q2:历史里的大文件必须迁进 LFS 吗?

不必全迁。判断标准是「变更频率 × 文件大小」:频繁变更的大二进制必须转 LFS,否则克隆体积会持续膨胀;只读归档类的大文件留在历史中影响有限,用 git filter-repo 清理时注意该操作不可逆。

Q3:迁移期间如何保证两边不脱节?

用仓库镜像双轨并行:旧系统只读,新仓库通过镜像保持同步,镜像任务按固定间隔自动执行。验证期结束后停止镜像、硬切换,团队无感知。

写在最后

集中式版本管理的迁移窗口,本质是一次把工程资产「资产化重构」的机会:历史理清、大文件分流、流水线重建,一步到位。极狐GitLab 官方文档中心提供从导入、镜像到 LFS 治理的完整指引,迁移方案设计建议先做一次仓库健康评估再定节奏。

现在就可以行动:免费试用极狐GitLab,或预约专家演示,获取针对你团队规模的一对一迁移路径评估。更多迁移细节可直接查阅极狐GitLab 文档中心。