`

基于SVN进行代码开发流程

    博客分类:
  • svn
 
阅读更多

1 SVN标准目录

Subversion有一个很标准的目录结构,是这样的。比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是:

 
 

这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改)。但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯。

trunk:主干,如果说把一个软件项目从开始到消亡比作一个故事的话,主线情节都在这里被SVN记录着。

branches:分支,有很多种用法,比如:版本发布维护分支、新特性开发分支,甚至是缺陷修复分支等等。

tags:标签,或者叫快照,某个版本发布时候,都在这里留档。

示例如图:

 
 

2 集中式:trunk进行主要开发

一般的,我们的所有的开发都是基于trunk进行开发,当一个版本/release开发告一段落(开发、测试、文档、制作安装程序、打包等)结束后,代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag。当下一个版本/阶段的开发任务开始,继续在trunk进行开发。

此时,如果发现了上一个已发行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(Developing Version)无法满足时间要求,这时候就需要在上一个版本上进行修改了。应该基于发行版对应的tag,做相应的分支(branch)进行开发

例如,刚刚发布1.0,正在开发2.0,此时要在1.0的基础上进行bug修正。按照时间的顺序:

 
 

这是一种很标准的开发模式,很多的公司都是采用这种模式进行开发的。trunk永远是开发的主要目录

3 分散式:分支进行主要开发

这种开发模式当中,trunk是不承担具体开发任务的,主要承担版本发布,一个版本/阶段的开发任务在开始的时候,根据已经release的版本做新的开发分支,并且基于这个分支进行开发。还是举上面的例子,这里面的时序关系是。

 
 
 
 

这其实是一种分散式的开发,当各个部分相对独立一些(功能性的),可以开多个dev的分支进行开发,这样各人/组都不会相互影响。比如dev_2.0_search和dev_2.0_cache等。但是这样merge起来就是一个很痛苦的事情

所以,第六步进行 选择性的merge,是可以当2.0开发结束后一起把dev_1.0(bugfix用)和dev_2.0(新版本开发用)merge回trunk。或者先把dev_1.0 merge到dev_2.0,进行测试等之后再merge回trunk。

这两种方法各有利弊,第一种方法是可以得到一个比较纯的dev_2.0的开发分支,而第二种方法则更加的保险,因为要测试嘛

多人协作时,第六步是最经常出问题的地方,严重的甚至会导致代码被覆盖回滚情况,其原因在于分支管理者创建分支后不再或长时间从主干拉回数据,导致最终合并回主干时分支的文件甚至结构都与主干有较大差别,产生较多冲突。需要人手解决,浪费了很多时间。

针对这个问题,是否有一种方案可以在分支提交时即检测该分支最后一次合并的版本是否与主干版本相符,如果不符则不允许提交,强制要求大家养成从主干拉数据的习惯呢?如果可以实现,那么在分支合并回主干时将几乎可以消灭掉冲突。

当前解决思路主要有3种:

  1. 不间断强调使用SVN时要经常从主干同步代码到分支。该方案缺点很明显,完全依赖人工,不可信。

  2. 在trunk里单独维护一个带最新版本号的readme.md,每次更新trunk时更新该版本到更新的版本号。此后合并分支回主干时判断下分支时的readme.md是否和主干里的readme.md保持一致,若小于主干,则强制同步主干代码到分支。该方案缺点是需要每次更新主干代码时都要强制手工维护版本号,容易出现低级错误——更新trunk时忘记更新readme.md里的版本号等情况。

  3. SVN本身记录版本更新信息,可以通过在服务器端监控主干,判断提交前(pre-commit)检测是否有分支最后一次合并版本号小于主干版本号,如果小于则不允许提交,强制要求先从主干合并。此方案是一种相对完美的方案。

以上呢,就是SVN的两种开发模式了,具体哪种好,并没有定论。这里大致的说一下各自的优缺点:

第一种开发模式(trunk进行主要开发,集中式):

优点:管理简单。

缺点:当开发的模块比较多,开发人数/小团队比较多的时候,很容易产生冲突而影响对方的开发。因为所有的改动都有可能触碰对方的改动。

第二种开发模式(分支进行主要开发,分散式):

优点:各自开发独立,不容易相互影响。

缺点:管理复杂,merge的时候很麻烦,容易死人。

4 最后,推荐第一种开发模式

 
 

责职说明:

Trunk:用于各版本开发提交代码

TAG:用于记录和保存每个release/milestone的代码

Branch:用于bug fixing

过程说明:

  1. 项目开始时,创建Trunk,开始1.0.0开发

  2. 所有小组成员都往Trunk中提交代码

  3. 当1.0.0开发完成后,创建一个标签:Tag1.0.0

  4. Tag1.0.0测试完成后,部署到服务器

  5. 开发小组开始新版本1.0.1开发,继续提交代码到Trunk中

  6. 1.0.1开发完成,创建Tag1.0.1,测试完后部署到服务器

  7. 开发小组开始新版本1.0.2开发,继续提交代码到Trunk中

  8. 1.0.1运行中发现bug,需要紧急修复 -> 从Tag1.0.1中创建1.0.1bug-fix Branch

  9. Bug修复代码提交到1.0.1bug-fix Branch,测试通过后,部署到服务器

  10. 提交到1.0.1bug-fix Branch的代码合并到Trunk中

  11. And so on……



作者:猿码道
链接:https://www.jianshu.com/p/a1c5a7ed4df6
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
分享到:
评论

相关推荐

    JAVA编写SVN统计代码数量系统

    【标题】"JAVA编写SVN统计代码数量系统"是一个基于Spring Boot框架的项目,用于统计在Subversion(SVN)版本控制系统中的代码提交情况。它能够详细地分析每个团队成员在SVN仓库中的代码贡献量。 【核心知识点】: ...

    SVN代码管理工具

    都提供了SVN的集成插件,使得开发者无需离开IDE就能进行版本控制操作,如检出(Checkout)、提交(Commit)、更新(Update)、解决冲突(Resolve)等,大大提升了开发流程的便利性。 【TortoiseSVN】是SVN的一个...

    SVN 代码管理 好用

    SVN(Subversion)是一种广泛应用于软件开发领域的版本控制系统,它的主要功能是跟踪和管理代码、文档等资源的变更。SVN的出现极大地提升了...无论你是个人开发者还是大型团队,都应该考虑将SVN纳入你的开发流程中。

    sonarqube jenkins svn maven代码质量检查.pdf

    这涉及到从版本控制系统中检出代码,使用Maven进行项目构建,通过Jenkins触发构建过程,并结合SonarQube进行代码质量的分析和报告。 整个集成工作流程大致如下: 1. 开发者在SVN中提交代码变更。 2. Jenkins通过...

    【SVN代码库数据统计分析工具】

    总的来说,"【SVN代码库数据统计分析工具】"是项目管理的重要辅助工具,它能提供有价值的洞察,帮助团队优化工作流程,提升开发效率,同时也有助于管理层评估团队绩效,进行资源分配和项目规划。通过持续跟踪和分析...

    svn二次开发系统

    SVN(Subversion)和VSS(Visual SourceSafe)都是版本控制系统,用于管理软件开发过程中的源代码和其他文件。在IT行业中,版本控制是至关重要的,因为它允许团队成员协同工作,跟踪每一次更改,并能轻松回滚到任何...

    基于Gitlab的代码审查流程(Code-Review)方案

    Upsource是JetBrains公司开发的代码审查工具,与IntelliJ IDEA等集成开发环境(IDE)紧密集成,支持对Git和SVN版本控制系统的代码审查。Upsource的主要特点是专注于代码审查,界面友好,与IDE无缝集成,但免费版本...

    SVN代码管理器

    TortoiseSVN是基于SVN的一个图形化客户端,尤其以其与Windows资源管理器的无缝集成而受到开发者们的青睐。在本篇中,我们将深入探讨TortoiseSVN的特性、安装与使用,以及它如何与Visual Studio(VS)集成。 1. **...

    SVNMANAGER SVN 代码管理 LINUX SVN管理

    【SVNMANAGER SVN 代码管理 LINUX SVN...通过上述步骤,你可以在Linux环境中成功部署并使用SVNManager来管理SVN代码库,实现高效且安全的团队协作。记得定期更新SVNManager到最新版本,以获得最新的功能和安全修复。

    SVN版本管理规范

    集中式开发——基于 Trunk 的开发和分散式开发——基于 Branches 的开发是两种常见的版本管理流程图。集中式开发方式简单,但代码对于多个不同的项目,不同的需求只有一份代码,正在修改中的代码不能很好地响应紧急...

    自动获取svn代码并且编译发布

    标题和描述中提到的“自动获取svn代码并且编译发布”是一种常见的持续集成(CI)实践,它涉及自动化从版本控制系统获取源代码、构建应用程序、并进行发布的过程。以下是这个流程涉及的关键知识点: 1. **Subversion ...

    ReviewBoard + Tao-ReviewBoard + SVN 搭建代码审阅平台

    搭建一个有效的代码审阅平台对于软件开发团队来说至关重要,它能提高代码质量,减少缺陷,...团队成员可以在Eclipse中方便地提交代码,进行审查,同时通过邮件接收审查进度的通知,从而提升整个开发流程的效率和质量。

    基于Maven+SVN自动打包

    总结来说,"基于Maven+SVN自动打包"是一种高效的开发实践,它整合了两个强大的工具,实现了从代码版本控制到自动构建和部署的无缝衔接。这对于大型项目和团队协作尤其有益,因为它提高了开发效率,减少了手动操作的...

    操作svn代码

    在Java代码中使用svn,首先要进行的是导入所需的库文件,并进行必要的配置。这通常涉及到设置svn的工作目录和URL,以及认证信息。例如: ```java import org.tmatesoft.svn.core.*; import org.tmatesoft.svn.core....

    svn代码量统计工具StatSVN的使用

    StatSVN是一款强大的开源工具,专门用于统计Subversion(简称svn)版本控制系统中的代码变化情况。它能够生成详细的报告,包括代码添加、删除、修改的...通过熟练使用StatSVN,可以更好地优化开发流程,提高软件质量。

    svn代码上传工具

    【svn代码上传工具】 在软件开发过程中,版本控制系统扮演着至关重要的角色,它允许开发者跟踪和管理项目中的源代码变更。其中,Subversion(简称svn)是一种广泛应用的集中式版本控制系统,而TortoiseSVN则是一个...

    团队开发工具资料(SVN)

    SVN可与各种IDE(如Eclipse、IntelliJ IDEA)和持续集成工具(如Jenkins)集成,实现无缝的开发流程。 9. **备份与恢复**: SVN仓库的数据安全性很重要。了解如何定期备份仓库,并在需要时恢复数据,是SVN管理员...

Global site tag (gtag.js) - Google Analytics