配置git-svn

时间:2013-11-15 21:09:13

标签: git svn git-svn

我是一个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存储库。其次,我将如何定期更新该代码?

1 个答案:

答案 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用户需要确保该分支的历史保持线性,这不是一件容易的事情。

相关问题