我想创建一个git存储库的备份,用于跟踪svn存储库(使用git-svn)。我可以为此目的使用git push --mirror,还是在需要恢复备份时丢失任何与git-svn相关的信息?
答案 0 :(得分:3)
git push
或git 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
- 也许与新的SVNHEAD
克隆进行比较。