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

如何确认SVN转Git迁移成功?提交数不符问题排查

SVN转Git迁移后提交数不匹配的问题排查

一、先明确:Git提交数≠SVN版本数是正常情况

你之前的理解有误,SVN和Git的版本模型本质不同,两者的提交/版本数没有必然相等的关系,核心原因包括:

  • SVN的空版本:如果某个SVN版本没有修改任何文件(仅修改日志、属性,或空提交),Subgit默认不会生成对应的Git提交。
  • SVN分支/标签的创建:SVN中创建分支/标签是通过复制目录生成的版本,Git里分支是指针、标签是引用,不需要生成独立提交,这类SVN版本不会被转换。
  • 迁移过滤配置:如果迁移时用了excludePaths配置排除部分路径,或只指定了部分分支迁移,对应SVN版本不会被转换。
  • 特殊合并场景:Subgit处理SVN的合并操作时,可能生成额外的Git合并提交,但这种情况较少,更多是前几种情况导致Git提交数更少。

二、裸仓库与克隆仓库提交数差异的原因

裸仓库包含所有分支、标签、隐藏提交的完整历史,统计的是全仓库的提交总数;而克隆仓库默认仅拉取默认分支的提交,其他分支需要手动拉取,所以你统计的是单分支的提交数,两者差异是正常现象。

你可以在克隆仓库中执行git log --all --oneline | wc -l,统计所有分支的提交总数,这个结果会和裸仓库的提交数基本一致。

三、检查Git中是否缺失内容的具体步骤

1. 验证分支/标签映射完整性

  • 执行subgit status查看Subgit的分支映射配置,确认所有需要迁移的SVN分支都已对应到Git分支。
  • 列出SVN所有分支:svn ls <你的SVN仓库地址>/branches,对比Git的全部分支:git branch -a,检查是否有遗漏的分支未迁移。

2. 检查特定SVN版本的迁移状态

  • 针对怀疑缺失的SVN版本,执行subgit find-svn-rev <SVN版本号>,如果返回空,说明该版本未被迁移;如果返回Git提交ID,说明已成功转换。
  • 反向验证:用subgit find-git-rev <Git提交ID>查看对应的SVN版本,确认映射关系是否正确。

3. 分析未迁移的SVN版本内容

  • 对未迁移的SVN版本,执行svn log -v -r <SVN版本号>查看该版本的修改内容,判断是否属于Subgit会忽略的类型:比如空提交、仅修改文件属性、修改的路径在迁移时被排除等。

4. 查看Subgit迁移日志

  • 打开Subgit迁移目录下的subgit/logs/文件夹,查看迁移日志文件,搜索Skipping empty revision、Excluded path等关键字,找到被跳过的版本记录。

5. 验证关键文件的历史一致性

  • 挑选几个核心业务文件,在Git中执行git log -- <文件路径>查看历史,对比SVN中svn log <文件路径>的版本记录,检查是否有缺失的修改版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:58:35