从没有--stdlayout的Git-Svn克隆中恢复

时间:2010-11-22 18:58:17

标签: git git-svn

我不小心克隆了Subversion存储库而没有添加--stdlayout参数, 给我一些类似的东西:

$ git svn clone --prefix=svn/ svn+ssh://code.example.com/project
[two weeks later]
$ git branch -a                                                                                                
* master
  remotes/svn/git-svn

svn / git-svn布局类似于:

branches/*
tags/*
trunk/*

有什么方法可以从中恢复?

3 个答案:

答案 0 :(得分:3)

目前,看起来重新开始是维持与SVN互操作性的唯一选择。

答案 1 :(得分:3)

这不是一个确切的答案,但我所做的是添加-r标志来指定最后几次提交,因为我真的不想要一年前的提交。

git svn clone --prefix=svn/ -s -r12000:HEAD http://some/svn/repo

这要求您知道要返回的转号,在本例中为12000.它让我在错过-s旗帜后保持理智,并做了我真正想做的事情。在合理的时间内第一名。

答案 2 :(得分:2)

这取决于:您希望将来能够与subversion进行互操作吗?

如果没有,请考虑在branches中为每个分支在git中手动创建分支,并将该分支目录的内容移动到顶层。这给了你一个工作的承诺,而git的重命名跟踪应该意味着看着历史工作得相当好。如果你想要标签,你可以类似地为每个标签创建一个分支,标记它,然后删除分支。

这不太好,但它应该可行。

更多的工作是使用git filter-branch重新编写您刚创建的每个分支的历史记录,方法与重新编写提示的方式相同。这应该为您提供一个看起来正确的存储库。但是你仍然不会进行颠覆整合,而且你必须弄清楚如何处理原始分支点。

很多,更多的工作是弄清楚git svn如何存储其元数据并相应地转换存储库(可能再次使用git filter-branch) - 所有数据应该在那里:)。