SubVersion管理代码最佳实践

阅读更多

前提:代码仓库的管理均会采用svn来管理

 

代码目录结构的创建:

 

一般创建三个目录为:

-- trunk(主干)

-- tags(标签/标记)

--branches(分支)

有时在同级目录下还会创建一个wiki的目录,作为对项目的介绍等。我有时也叫tags目录为里程碑文件夹,会把里程碑版本放在此处。

 

tags和branches下一般为根据需要从trunk目录拷贝过来的。

 

tags的创建要求:

1、代码在一种平台下通过编译(必须);

2、代码编译出来的版本通过一定冒烟测试、单元测试;

3、在项目要求的平台都可以编译通过;

4、一般有一个测试包提交测试时,就需要在tags下建立对应代码标签。

 

tags下的代码一般不可以修改。

 

 

掌握创建分支的时机

这是一个容易引起争议的问题,事实上它取决于您的软件项目培养。没有规定通用的策略,仅在此描述三种常见的。

从不分支系统

(常用于还没有可运行代码的初始项目。)

  • 用户将他们的日常工作提交到 /trunk 中。
  • 用户开始提交一系列复杂更改时,/trunk 偶尔会“损坏”(无法进行编译或功能测试失败)。

优点:此策略非常容易遵守。新开发人员进入的门槛很低。不需要学习如何进行分支或合并。

缺点:无序的开发和代码可能随时变得不稳定。

旁注:在 Subversion 中,此类开发的风险要比在 CVS 中小得多。因为 Subversion 的提交是封闭单元式的,因而在其他人的提交过程中,签出或更新不会收到“部分”提交。

始终分支系统

(常用于需要进行大量管理和监督的项目。)

  • 每个用户对每项 编码任务的创建或操作都是在私有分支中进行的。
  • 编码完成后,原编码者、同级或经理将对所有私有分支的更改进行审查并将它们合并到 /trunk 中。

优点: 能保证 /trunk 始终都能极其 稳定。

缺点:编码者之间被人为隔离,会导致很多不必要的合并冲突。需要用户进行大量的额外合并工作。

按需分支系统

(这是 Subversion 项目所使用的系统。)

  • 用户将他们的日常工作提交到 /trunk 中。
  • 规则 #1:必须随时对 /trunk 进行编译并确保通过回归测试。将对违反此规则的提交者提出公开批评。
  • 规则 #2:单个提交(更改集)必须小于同级所能审查的最大限度。
  • 规则 #3:如果规则 #1 与 #2 产生冲突(如一系列小提交必然会扰乱 trunk),则用户应创建分支,然后将一系列更小的更改集提交到分支中。这样即可允许进行同级审查,又会不破坏 /trunk的稳定性。

优点: 可保证 /trunk 始终都能保持稳定。分支和合并的问题将较少。

缺点:将添加一些负担到用户的日常工作中:每次进行提交之前,都必须进行编译和测试。

 

里程碑的创建

 

集成人员将开发人员提交的功能集成到主干上,编译通过后提交到主干上集成了一定的功能后,创建一个里程碑版本,一般建议按周创建里程碑版本。并在tags下创建响应的代码快照,并将安装包传至指定位置。

 

开发人员一般于最新的里程碑版本创建分支,并在分支上工作,并在自己的分支上提交,在提交到svn之前需要编译通过。开发人员需要根据自己开发情况来同步到主干的里程碑代码。如果需要继承主干上,需要同步到新近的里程碑。

 

测试人员

 

测试人员对开发人员的代码进行测试,达到一定测试标准后,测试通过,然后提交由集成人员来集成。按需分支系统适应方式代码较少,或者参与开发人员较少

 

开发人员可以直接主干上提交。开发负责人来编译版本给测试。

 

开发人员把所有的新特性提交到主干,每日的修改提交 /trunk,新特性, bug修正和其他。新近的开发人员不能提交代码,交由有经验的开发人员验证后才能提交到主干上。

 

当开发小组认为软件已经做好基本发布的准备(比如,版本1.0)然后 /trunk 会拷贝到 /branches/1.0。这个主干被拷贝到“发布”分支。然后再发布分支上继续修改bug。

 

如果bug修正经测试达到一定的要求认为可以完成时,可以拷贝到/tags/1.0.0,这个标签被建立并放权给相关人员

 

向svn库提交代码要求针对每次提交到主干上的代码均需要编译通过,代码每次提交到svn上均需要添加注释。

 

这是本人查看文档和自己实践后的总结,有错误的地方或更好的方法,还希望大家提出。

 

以前只是看别人写的文章,看懂后只是实践下就收藏起来,结果后来在用的时候发现很多好的文章都找不到了,所以以后会经常做总结和学习记录。

 

你可能感兴趣的:(软件工程,svn,实践)