git svn clone,mergeinfo丢失了

时间:2017-07-31 01:20:10

标签: git svn git-svn

我们有一个SVN设置,它经常发生分支合并。我目前正在追踪迁移到git。我使用svn2git进行迁移,但我认为同样适用于git svn。

似乎svn git clone不会保留svn的mergeinfo,因为svn和git merge的工作方式不同?例如,在dong git svn clone之后迁移svn trunk repositoy(带或不带功能分支)。执行git log --full-history只会显示分支被合并到的主干中的提交,但是这个合并引入trunk的分支内的所有提交历史都不再存在,但是如果使用TortoiseSVN它会在svn repo中显示并启用“包括合并的撤消”#39;。似乎svn中的所有mergeinfo都没有保留/复制到git master / trunk存储库中?应该发生什么?

我已经读过SubGit可以处理的问题(我还没有尝试过)。但只是想确保git svn clone确实没有保留git中svn repository的mergeinfo属性/信息。

1 个答案:

答案 0 :(得分:0)

正如@Vampire和其他人在其他地方提出的建议和SO Q&作为:git svn可能不是导入/转换svn repos的最佳工具,我很确定它适用于某些情况。但在边缘情况下,无论如何都没有神秘感(对我而言)。

在我们的案例中,这是因为非标准的repo结构,它有一个共享的根级别主干和许多不同应用程序的分支。所以它的结构看起来像&trunk; app1,app3,app3 ......' branches&app1_feature1,app1_feature2,app2_feature,app3_feature1'。

最初我没有导入任何分支,这些分支没有将合并后的信息从分支机构带入主干。然后我尝试将我需要的主干和分支移动到与标准结构相同的svn repo中的不同位置,但是git svn似乎也不满意。之后我尝试了SubGit因为它似乎很容易入门并可以自由导入,但最初没有成功,因为它使用相同的移动主干/分支。然后我尝试使用SubGit导入整个'分支'最后得到了一些合并的infor,但由于重命名/移动主干,仍然缺少一些早期的修订信息。

最后我最终使用了ruby gem' svn2git'以下评论:

svn2git https://svn-host/product --trunk trunk/application1 --branches branches 
   --no-minimize-url --notags --metadata --authors ../../authors.txt -v 

至少带来了最新的合并信息,并且作为一个快速查看,似乎有所有的修改,即使重新命名/移动旧分支,因为新的主干。但是转换花了很长时间,而且我必须让它在一夜之间运行,它会将其他应用程序中所有不必要的分支带到我的git clone中。

注意:对于我用于svn2git的评论,我后来意识到' - 分支'参数可以作为'分支'是默认值。