git push --mirror作为git-svn备份是否足够?

6
我想创建一个git仓库的备份,用于跟踪svn仓库(使用git-svn)。我可以使用git push --mirror来实现这个目的吗?如果需要恢复备份,是否会丢失任何与git-svn相关的信息?
1个回答

3

可能 git pushgit 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元数据的关键是要使引用看起来与从新导入时一样。您可以使用上面提到的git update-ref,通过在.git/refs/内部复制refs文件或使用git pack-refs然后编辑.git/packed-refs来完成这个过程。为了测试是否正确,您可以使用git show-ref命令进行比较,也可以与一个全新的SVN HEAD克隆进行比较。

感谢您的回答。git update-ref 命令给出了以下信息:"fatal: origin/svn/trunk: not a valid SHA1",但是 git show-ref 命令列出了 git 仓库镜像的 refs/remotes/trunk。那么我可以跳过 update-ref 命令吗? - fawick
git svn init之后,我使用git update-ref refs/remotes/trunk origin/master获得了更好的结果。但是,与上面的示例不同,我使用了带有-t/-b选项的git svn init来设置标签和分支,因此我还必须为每个标签设置引用。(通过在原始的git-svn克隆上运行git show-ref获得。) - seanf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接