我想创建一个git仓库的备份,用于跟踪svn仓库(使用git-svn)。我可以使用git push --mirror来实现这个目的吗?如果需要恢复备份,是否会丢失任何与git-svn相关的信息?
可能 git push
或 git bundle
不包括svn元数据。
但是根据git svn
介绍,您可以尝试恢复这些svn元数据。
(免责声明:未直接测试)
重建git-svn元数据
如果您从其他地方(例如从 repo.utsl.gen.nz
)通过 git-clone
复制了存储库,或者您只是删除了它,那么您将没有任何SVN元数据 - 只有提交。
在这种情况下,您需要重建您的SVN元数据,例如,仅保持主干最新 - 当您运行 git-svn fetch
时,git-svn
将重建其元数据。
$ 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 init
之后,我使用git update-ref refs/remotes/trunk origin/master
获得了更好的结果。但是,与上面的示例不同,我使用了带有-t/-b选项的git svn init
来设置标签和分支,因此我还必须为每个标签设置引用。(通过在原始的git-svn克隆上运行git show-ref
获得。) - seanf