导入svn repo到git没有历史记录

时间:2014-04-08 08:19:24

标签: git svn git-svn

我需要将svn repo(trunk,branches,tags)导入到没有历史记录的新空git repo中。 Svn历史非常大,因为存在许多分支和标签。

Svn的主干必须进入git的主人。 Svn的分支机构必须进入git的分支机构。并且svn的标签必须进入git的标签。一切都没有历史。

此命令将导入历史记录:

git svn clone http://server.ru/myrepo/ --stdlayout --preserve-empty-dirs .

手工导入分支和标签(从svn中检出并提交给git)太费力了。

2 个答案:

答案 0 :(得分:1)

建议-r HEAD似乎只获取最新的主干修订版,但忽略了分支和标记。而且,在我的测试中,当最后一次提交到存储库不是trunk时,它没能执行git-svn clone。

您可以尝试单独获取主干,分支和标签。第一个init空git-svn存储库:

git svn init http://server.ru/myrepo/ --stdlayout .

然后对于每个trunk,标签,分支找到他们最新的svn版本并执行git-svn-fetch:

git svn fetch -r <svn revision>

为避免手工劳动,您可以创建一个简单的脚本来解析svn ls -v <svn_path>/branchessvn ls --xml <svn_path>/tags的输出。

或者,如果您已经有git-svn导入的存储库但想要去除历史记录,则可以为每个分支/主干执行:git checkout --orphan <branch> && git commit -m "as imported from svn" - 这将产生一堆可以进一步推送的分离分支一个新的&#34;清洁&#34; git repository。

答案 1 :(得分:0)

仔细阅读git-svn man page ,注意-r选项并在克隆上使用-r HEAD