我是一个svn用户,需要将我的svn代码镜像到git存储库。 git的用户将无法访问svn存储库,因此解决方案不能依赖于直接从svn检出代码作为某种外部存储库。
我正在尝试使用git-svn,以便我可以在svn中进行更改,然后更新并将它们同步到git。
我已经克隆了我想要同步我的svn代码的git repo,然后我做了类似的事情:
git svn clone svn+ssh://path/to/my/code --trunk my_module --prefix mirror/
我可以看到我的svn repo被克隆了。如果我尝试切换到这样的主干分支:
git checkout mirror/trunk
我被告知我在detached HEAD state
(一个适合我现在感觉的错误信息。)
所以我的问题是,如何将我本地检出的svn代码上传到远程git存储库。其次,我将如何定期更新该代码?
答案 0 :(得分:2)
mirror/trunk
是git所谓的远程跟踪分支 - 您不能在本地提交它,只能获取来更新它,所以这就是为什么你会看到一些有点戏剧性的“超级HEAD”信息。
您可能已经在本地分支上默认跟踪它,master
,在克隆之后。要返回,只需运行git checkout master
。
要将代码从svn移动到git ,首先为希望代码最终输入的git存储库添加远程:
git remote add public git@...
我建议为svn工作创建一个新的分支,所以git开发人员不会提交它并使事情复杂化:
git checkout -b svn-work
然后将推送到您刚刚设置的遥控器:
git push public svn-work
为了让git clone保持最新,你需要运行(手动或通过cron):
git svn rebase
git push public svn-work
如果您希望连接是双向的,事情会变得棘手。将工作从git移动到svn 的命令很简单:
git svn dcommit
...但是你可以回到svn中有很多警告;基本上,git用户需要确保该分支的历史保持线性,这不是一件容易的事情。