我尝试使用git-svn导入svn服务器中托管的项目的早午餐。
存储库结构如下所示
root
[...]
project 1
trunk
branches
tags
project 2
trunk
branches
tags
[...]
我想要实现的是导入 project1 和 project2 的所有svn历史记录。
不幸的是,原始存储库包含超过200万个修订版...一个完整的git-svn克隆将永远存在。
所以我检索了我的两个项目的第一个和最后一个版本并尝试运行
git svn clone -s https://svn.bansel.it/h2o/ \
--include-paths='^[/](Project1|Project2)' \
-r1788813:1792593
其中 1788813 是第一次修订,而 1792593 是最后一次感兴趣。
当我执行命令时,它运行时没有错误。我还注意到一些网络流量,但如果稍后我尝试运行git svn log
$ git svn log
fatal: bad revision 'HEAD'
rev-list --first-parent --pretty=medium HEAD --: command returned error: 128
目标存储库似乎也是空的。 我错过了什么吗?
修改
导入后我无法关闭SVN存储库,所以我需要双向同步
答案 0 :(得分:1)
您的clone
命令错误。
-s
的 https://svn.bansel.it/h2o/
告诉git-svn
查看https://svn.bansel.it/h2o/trunk
,https://svn.bansel.it/h2o/tags
和https://svn.bansel.it/h2o/branches
。在那里它没有找到任何东西,因此你的克隆不包含任何提交,因此没有HEAD
引用。
最好有两个git存储库,每个项目一个,所以两个clone
命令,如git svn clone -s https://svn.bansel.it/h2o/Project1/ -r1788813:1792593
和git svn clone -s https://svn.bansel.it/h2o/Project2/ -r1788813:1792593
。
或者,如果您希望两个位于不同远程控制器中的同一存储库中,则可以使用与clone
和--prefix=origin-project1
相同的git存储库执行--prefix=origin-project2
命令,以获取这两个项目在两个单独的遥控器。但我真的认为你应该为这两个人使用单独的Git回购。
注意:请注意,就我记忆而言,您还需要每个后续fetch
的修订版参数,但我可能错了,我通常不会限制修订版本git-svn
。