2010-01-18 37 views

回答

3

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

但根据git svn intro,你可以尝试并恢复这些svn元数据。
(免责声明:没有直接测试)

重建的git - svn的元数据

如果通过git-clone复制从别的地方(例如,从repo.utsl.gen.nz)库,或者如果你只是吹它离开了,那么你就不会有任何SVN元数据 - 只是提交。
在这种情况下,您需要重新生成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元数据需要记住的重要事情是使裁判看起来就像他们看起来和新的进口;您可以使用上述的git update-ref,通过复制.git/refs/内部的参考文件或使用git pack-refs然后编辑.git/packed-refs来完成此操作。
要测试您是否正确,请使用git show-ref - 可能与新SVN HEAD克隆进行比较。

+0

感谢您的回答。 git update-ref给我的信息是:“fatal:origin/svn/trunk:不是有效的SHA1”,但是git show-ref列出了git repo镜像的refs/remotes/trunk。我可以跳过update-ref吗? – fawick 2010-01-18 16:25:55

+0

我在'git svn init'之后用'git update-ref refs/remotes/trunk origin/master'获得了更好的结果。 但是,与上面的例子不同,我使用'git svn init'和-t/-b选项来设置标签和分支,所以我还必须为每个标签设置参考。 (通过在原始git-svn克隆上运行'git show-ref'获得。) – seanf 2011-04-08 12:56:46

相关问题