本文之前就想写,但是当时对svn switch不是非常了解,而且没有解决多分支开发的问题。
到今天为止,靠着强大的git把多分支开发的问题基本解决了,就上来把这一段时间内的解决过程和最终的方案说一下,希望对仍旧被svn“蹂躏”的各位有用。
首先说下多分支开发的问题。在svn下多分支开发唯一的方法是把代码checkout到不同目录中。svn switch并不能承担分支切换的功能。svn switch从它的功能来说是让一个工作副本中包含来自多个库的内容。我能想到的典型场景是“分支”合并到主干上时,当前的主干副本来需要来自其他库,即开发完成的分支的内容。其他可能是一些“异常情况”,反正不要被switch这个单词骗了……
那么svn是否有别的命令支持分支切换么?我个人没有查到。其实从我这一段时间的research,我对svn进一步的认识是:svn没有分支的概念。得出这个结论的过程可能比较长,而且有比较多的个人标准,这里就不展开了。重点是如何解决多分支版本开发问题。
在research最后几天,也就是前天,我查到一个git-svn命令,用git来管理svn。虽然是用我的手机在2G网络下查到的东西,但是一下子吸引了我,直觉告诉我我要的可能就是这个。我想很多用git的人知道,git不用分多个目录checkout多个分支,直接在工作副本中切换即可。那么用git管理svn是否也可以这么方便么?答案是确定的。不愧是强大的git。
首先是把repository clone下来,这个时间可能会比较长。
git svn clone -s URL
接下来一般来选择分支进行工作。
git branch -r git branch -b local/branchX X
确认你当前状态
git status git svn info git svn dcommit --dry-run
常规开发中……
提交变更到本地
git commit -a -m "foo"
临时保存修改切换分支
git commit -a git stash git checkout anotherBranch git checkout originBranch git stash pop
提交到远程svn repository
git svn dcommit
至此,常规的svn操作都可以用git完成了,不得不说git太强大了,也进一步明白了为什么当初git的开发者为什么要开发git,而不是继续使用svn了。
One response to “svn switch and git svn”
[…] 之前,个人写过使用git管理svn的文章,距离当时差不多有两个月了,说说自己在这两个月内学到的一些小东西。 […]