使用kde svn2git工具转换为git时保留svn复制历史记录

时间:2018-12-10 11:20:21

标签: svn2git

我的问题与Retaining svn copy history when converting to git非常相似,除了我使用的是免费的kde svn2git工具

总结一下: 我正在尝试将单个SVN存储库转换为单个git存储库。 将svn信息库迁移到git之后,我注意到git似乎不遵循svn复制操作,因此生成的历史记录比我期望的要简短得多。假设我的SVN回购看起来像这样:

  • a
  • b
  • c
  • 父项目

    • b

    • c

最近将项目b和c复制到parent-proj下,这是重组工作的一部分,目的是最终从根目录下的旧位置删除它们。迁移后,生成的git repo会丢失移动之前源自/ b和/ c的所有历史记录。

我正在使用kde svn2git工具,该工具可以在https://github.com/svn-all-fast-export/svn2git找到 我试图查看该工具的示例规则文件和文档,但找不到有关如何使用此工具实现此目的的任何信息。

1 个答案:

答案 0 :(得分:0)

根据我的经验,您描述的情况是SVN中经常发生的情况。人们创造了一个“任意主干”。

理想情况下,项目应遵循Subversion conventions。这意味着每个项目都会有一个名为“ trunk,branches,tags”的子文件夹。然后,在使用svn2git进行迁移时,您需要做的是这三个文件夹的规则:

create repository fw
end repository

match /Project/trunk/
  repository fw
  branch master
end match

match /Project/branches/([^/]+)/
  repository fw
  branch \1
end match

match /Project/tags/([^/]+)/
  repository fw
  branch refs/tags/\1
end match

不幸的是,如果要迁移的存储库没有严格遵循约定,那么您可以拥有任意的主干,这意味着完全独立的历史记录。因此,您需要一个单独的规则,例如,您可能具有以下规则:

match /Project/trunk/subdir1/subdir2/myproj/trunk
  repository fw
  branch master
end match

您可能需要编写脚本来检查svn路径,该路径会根据发现的路径生成规则。