我需要将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)太费力了。
答案 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>/branches
或svn 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