我已将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也会获得之前的所有提交。内容似乎是正确的,但历史不是。
答案 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
对存储库进行匿名化吗?然后请在某个地方发布测试用例。