使用Subversion辅助开发,有一个重要的概念就是主干与分支。

采用主干与分支的开发方法,可以有几种不同的策略:

  1. 主干上开发,分支上发布。发布之后,如果分支有BUG(主干可能也是有的),则在分支上修改BUG。然后合并到主干。分支的发布 继续进行。这个一般适用于客户化软件工程的。
  2. 主干保持一个最新的稳定版本,保证随时能提供稳定的发布版本。而所有的新功能、新技术实验全放在分支上去做开发,进行新技术的验证实验。等分支相对稳定以后,再合并到主干上形成稳定的发布版本。此 时就要更新主干,进行主干版本的升级。很多开源软件基本采取这种策略。
  3. 还有一种就是这两者的混合,结合两者的优点,即保证随时可以有稳定的版本发布,又能保证客户化的版本分支开发功能及其客 户化版本的维护。

下面介绍采用第2中策略的详细步骤和命令。

以trunk为主干目录,branches下为分支目录。在分支进行开发,稳定后合并入主干。

首先,从主干创建开发分支:

[lax@liulantao-com ~]$ svn cp http://gnu.bnu.edu.cn:8000/repos/www.myshu.org/trunk/ http://gnu.bnu.edu.cn:8000/repos/www.myshu.org/branches/www.myshu.org_20090428/ -m "Creating branch: 20090428."
Committed revision 10.

然后,获取分支代码,进行新特性的开发工作。

[lax@liulantao-com ~]$ svn co http://gnu.bnu.edu.cn:8000/repos/www.myshu.org/branches/www.myshu.org_20090428/

之后,则进入本地的www.myshu.org_20090428目录中进行开发,所有改动直接提交,直至新功能稳定并完成。

[lax@liulantao-com ~]$ cd www.myshu.org_20090428/
[lax@liulantao-com ~]$ [change the code]......
[lax@liulantao-com ~/www.myshu.org_20090248/]$ svn ci -m "Changing something."

分支开发完成后,检查分支的历史,获得创建时所在的版本。

[lax@liulantao-com www.myshu.org_20090428]$ svn log --stop-on-copy -q http://gnu.bnu.edu.cn:8000/repos/www.myshu.org/branches/www.myshu.org_20090428/
------------------------------------------------------------------------
r10 | lax | 2009-04-28 11:46:02 +0800 (Tue, 28 Apr 2009)
------------------------------------------------------------------------

数值最小的版本号是我们需要合并的版本。本例中是r10。记下这个数值。

获取主干的代码。

[lax@liulantao-com ~]$ svn co http://gnu.bnu.edu.cn:8000/repos/www.myshu.org/trunk
[lax@liulantao-com ~]$ cd trunk/

接着将开发分支合并入刚获取的主干代码上。

[lax@liulantao-com trunk/]$ svn merge -r 10:HEAD http://gnu.bnu.edu.cn:8000/repos/www.myshu.org/branches/www.myshu.org_20090428/

然后查看合并后主干代码的状态。

[lax@liulantao-com trunk/]$ svn status

如果没有冲突(conflict),则可以提交了新的主干了。

[lax@liulantao-com trunk/]$ svn ci -m "Adding new features."

现在,主干已经形成一个新的状态。在整个过程中,主干的代码一直保持着稳定可用的状态,而分支代码则处于开发状态。