使用git-svn重新启用镜像

时间:2011-07-09 19:49:36

标签: git svn version-control git-svn

一段时间以来,我一直在将Subversion存储库镜像到Git存储库。哪个一直很好。但是,由于虚拟服务器崩溃而没有备份,我必须再次设置镜像。我需要跟踪的存储库大约有1200次提交,并且包含很多文件(这是Git镜像的主要原因,因为检查repo的副本要快得多)。

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

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

如何在现有Git分支上重新启用镜像Subversion存储库,该分支仅在Subversion存储库中提交几个提交后面?

2 个答案:

答案 0 :(得分:11)

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

然而,既然你没有它,试试这个:

  1. git svn init http://hostname/svn/repository以及之前使用过的任何其他参数(可能-s?)

  2. git checkout来自svn的最新提交。

  3. 重新创建git-svn参考:git update-ref refs/remotes/git-svn HEAD(如果您使用-s,则应该refs/remotes/trunk代替

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

答案 1 :(得分:0)

我在http://trac.parrot.org/parrot/wiki/git-svn-tutorial找到了另一种方法:

  

将git-svn元数据添加到github克隆

     

如果要重新填充可以快速完成的SVN元数据   通过从gihub上获取最新的leto's repo克隆并添加   这到你的.git / config

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

然后运行此命令以查找“top commit”

 git show origin/upstream | head -n 1
     

并将该提交哈希放入文件.git / refs / remotes / trunk   (显然用上面命令中的那个替换has)

 echo c85aaa38b99cedb087e5f6fb69ce6d4a6ac57a0b > .git/refs/remotes/trunk
     

最后

 git svn fetch