在git svn clone之后修复无父提交

时间:2014-11-11 08:08:18

标签: git github git-svn

我已将Subversion存储库转换为带有以下内容的git:

git svn clone --no-metadata --stdlayout --prefix svn/ 

它工作得很好,但我在存储库中有一些漏洞,我认为这意味着git svn无法找到父母:

A----B---C---D (2.0)      E --- F --- G (2.1)

这里,2.1分支的第一次提交没有父级,但它应该将2.0分支作为父级。

我尝试过改装,但是因为冲突失败了,有没有办法修复这些链接?

我认为它不起作用,因为E也会获得之前的所有提交。内容似乎是正确的,但历史不是。

1 个答案:

答案 0 :(得分:1)

是的,2.1分支没有父级,因为git svn找不到父级。

这通常是由未使用svn copy创建的SVN分支引起的,而是通过本地复制文件,然后svn add并提交它们。 在这种情况下,SVN提交不包括从中复制的信息,因此git svn无法知道要用作祖先的内容。这是一种不好的做法(在SVN中),但现在已经太晚了。

如何解决这个问题:

据我所知,git rebase确实应该适用于这种情况。类似的东西:

git checkout 2.1
git rebase 2.0

我刚测试了这个:我创建了一个简单的SVN repo,它创建了一个如上所述的分支,使用git svn克隆它并重新设置了分支,它起作用了。

如果您遇到冲突,还会有其他因素阻碍。 在这种情况下,我们可能只能帮助测试用例。

您可以通过构建虚拟仓库来创建最小的测试用例吗?或者,您可以使用带有--anonymize选项的git fast-export对存储库进行匿名化吗?然后请在某个地方发布测试用例。