2011-07-09 78 views
10

一段时间以来,我一直在将Subversion存储库镜像到Git存储库。这一直工作得很好。但是,由于虚拟服务器崩溃而没有备份,我必须重新设置镜像。我需要跟踪的存储库差不多1200次提交,包含大量文件(这是Git镜像的主要原因,因为检出副本的回购速度非常快)。使用git-svn重新启用镜像

我现在需要做的是让我新克隆的Git镜像再次跟踪Subversion存储库。我没有添加新的远程参考的问题,但似乎无法弄清楚如何能够再次将svn提交到Git分支。

我似乎收到的一个错误是Unable to determine upstream SVN information from working tree history

如何在现有的Git分支上重新启用镜像Subversion存储库,该分支仅位于来自Subversion存储库的几次提交之后?

+0

据我所知,有没有简单的方法来做到这一点。(如果有一个复杂的方式,我不知道它。) – svick

回答

11

让它再次运行的最简单方法是从原始文件拷贝.git/svn目录,因为这是跟踪额外的svn元数据的地方(假设git-svn配置相同)。

不过,既然你不用它试试这个:

  1. git svn init http://hostname/svn/repository与您之前使用的任何其他参数(?也许-s

  2. git checkout最新从SVN提交。

  3. 重新创建git-svn REF:git update-ref refs/remotes/git-svn HEAD(或者,如果你使用-s,这应该是refs/remotes/trunk代替)

  4. 从SVN因为当前提交获取最新:git svn fetch --parent。这应该为你的整个历史重建git-svn元数据。

+0

谢谢,这个伎俩!我还不能奖赏赏金(似乎要等待9个小时) – Htbaa

+0

我不太明白'git checkout'这个段落。我应该结帐什么? –

+0

一个可能的候选人是'master',除非你从git-svn获得最新版本后一直在'master'上进行操作。基本上你想'checkout'你在'git log'中看到的提交消息中有SVN信息的最后一次提交,这样git-svn就可以从它离开的地方获取它。 – dahlbyk

0

我发现了另一个方法在http://trac.parrot.org/parrot/wiki/git-svn-tutorial

添加的git-svn的元数据,GitHub的克隆

如果你想重新填充,能够迅速通过完成 的SVN元把你最新的莱托回购克隆关闭gihub,并加入 这到你的.git/config

[svn-remote "svn"] 
     url = https://svn.parrot.org/parrot 
     fetch = trunk:refs/remotes/trunk 

然后运行这个命令查找“顶提交”

git show origin/upstream | head -n 1 

,并把该犯的散列到一个文件中的.git /参/遥控器/主干 (显然取代与上述命令的一个)

echo c85aaa38b99cedb087e5f6fb69ce6d4a6ac57a0b > .git/refs/remotes/trunk 

最后

git svn fetch