git push --mirror是否足以作为与git-svn一起使用的存储库的备份?

时间:2010-01-18 14:27:46

标签: git git-svn

我想创建一个git存储库的备份,用于跟踪svn存储库(使用git-svn)。我可以为此目的使用git push --mirror,还是在需要恢复备份时丢失任何与git-svn相关的信息?

1 个答案:

答案 0 :(得分:3)

git pushgit bundle可能不包含svn元数据。

但根据git svn intro,您可以尝试恢复这些svn元数据 (免责声明:未直接测试)

  

重建git-svn元数据

如果您从其他地方(例如,从repo.utsl.gen.nz)通过git-clone复制了存储库,或者如果您只是将其删除,那么您将没有任何SVN元数据 - 只需提交。登记/> 在这种情况下,您需要重建SVN元数据,例如,只是让干线保持最新状态 - git-svn将在您运行git-svn fetch时重建其元数据。

$ git update-ref refs/remotes/trunk origin/svn/trunk
$ git svn init https://svn.perl.org/parrot/trunk
Using higher level of URL: https://svn.perl.org/parrot/trunk => https://svn.perl.org/parrot
$ git svn fetch
Rebuilding .git/svn/git-svn/.rev_db.d31e2699-5ff4-0310-a27c-f18f2fbe73fe ...
r17220 = 78ad11bf2f61b35e1cb32a978ab546d198be8a2e
r17219 = 605264b06d84670ec402d7a7a21c0016cae3a928
r17218 = a8ceba9c503d2be8e8e69a3df454017322906cf5
...
  

重建git-svn元数据时要记住的关键是让refs看起来就像从新导入中看起来一样;您可以使用上述git update-ref,通过复制.git/refs/内的参考文件,或使用git pack-refs然后修改.git/packed-refs来执行此操作。   要测试您是否正确,请使用git show-ref - 也许与新的SVN HEAD克隆进行比较。