我们正在尝试将我们的主源代码库从svn迁移到git 我的第一次尝试是简单地做一个git svn克隆。克隆完成后,我发现第一次提交是在2012年11月。我知道这个代码已经有几年了 检查svn repo看起来好像是第一次提交主目录发生在2012年11月,而repo中的几个文件已经提交了多年。那么如何在父目录之前提交目录中的文件..
我告诉周围,因为我是公司的新人,没有人确切知道,但是这个回购经历了一些svn重新定位和svn以不寻常的方式移动,例如他们发展成一个分支然后移动了分支作为主干内的目录,或者发展成分支,然后将该分支重命名为trunk等。我选择了2012年11月之前发生的旧提交之一,可以使用git log查询并尝试
svn up -r 599 http://myrepo/trunk
并收到错误:
svn: E195012: Unable to find repository location for 'http://myrepo/trunk' in revision 559
此错误对于2012年11月之前的所有提交都是可重现的,即那些可以使用svn日志查询但无法检出的提示
好消息是我可以做类似的事情:
svn diff -r 599 http://myrepo/trunk
我的下一个方法是使用svn diff运行所有提交,创建补丁并使用原始作者,日期等将它们应用于git ...
如何更好地提取如何提取此类已损坏的提交?
我没有物理访问回购,我不能使用svnadmin
修改1:
事实证明我没有查询根目录,而是在树下一层,这就是我遇到这样的错误的原因。 无论如何我做了一个svnrdump并成功转储了整个存储库(> 32K提交),而且repo包含了我必须跳过的损坏的提交。
此外,它已在本地导入。这有助于我进一步了解发生的事情
基本上,回购曾经有一个非常混乱的结构,比如
svn
|_Project1
|_subproject1
|_branches
|_branch1
|_branch2
|_trunk
|_tags
|_tagv1
|_Non-JavaProject
|_subproject
|_Project2
|_AnotherSubproject
|_SubSubproject
|_Subproject2
|_branches
|_tags
|_Subproject3
|_trunk
|_Subproject4
|_Subsubproject
|_branches
|_tags
|_trunk
之后发生的事情是,使用svn mv和copy的混合,结构有点精炼
SVN | _mainProject | _trunk | _branches | _tags
所以现在我们有像
这样的路径mainProject/trunk/_Project1
mainProject/trunk/_Project1/subproject1
mainProject/trunk/Project2/AnotherSubproject/SubSubproject
分支/标签也是如此
换句话说,我需要在fetch和其他头文件中的.git / config中定义一个方法,以便mainProject的不同目录将遵循不同的(多个)旧路径
这可能吗?
答案 0 :(得分:0)
在SVN分支中,包括中继基本上只是存储库中的目录。在r599之前,您可以通过在详细模式下运行SVN repo根目录登录来确定文件的位置。即svn log -v http://myrepo/@599
它将向您显示所有提交和他们在该存储库中的r599之前触及的路径,包括提交到分支,重命名等。其中一个将是移动目录的提交。这将帮助您在提交之前文件所在的位置,并且可以从旧位置签出以前的修订版。