我的问题与Retaining svn copy history when converting to git非常相似,除了我使用的是免费的kde svn2git工具
总结一下: 我正在尝试将单个SVN存储库转换为单个git存储库。 将svn信息库迁移到git之后,我注意到git似乎不遵循svn复制操作,因此生成的历史记录比我期望的要简短得多。假设我的SVN回购看起来像这样:
根
父项目
b
c
最近将项目b和c复制到parent-proj下,这是重组工作的一部分,目的是最终从根目录下的旧位置删除它们。迁移后,生成的git repo会丢失移动之前源自/ b和/ c的所有历史记录。
我正在使用kde svn2git工具,该工具可以在https://github.com/svn-all-fast-export/svn2git找到 我试图查看该工具的示例规则文件和文档,但找不到有关如何使用此工具实现此目的的任何信息。
答案 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路径,该路径会根据发现的路径生成规则。