代码版本管理规范_v1.1_第1页
代码版本管理规范_v1.1_第2页
代码版本管理规范_v1.1_第3页
代码版本管理规范_v1.1_第4页
代码版本管理规范_v1.1_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XXXXXXXX 代码版本管理规范 历史版本 版本号 主要作者 修改记录 完成日期 0.1 XXX 新建文档 2015/12/16 0.2 0.3 0.4 目录 历史版本 .2 1 引言 .4 1.1 目的 4 1.2 管理工具 4 2 现状概述 .5 3 现状分析 .5 3.1 现状详述 5 3.2 目标细化 6 3.3 SVN 版本管理 .6 3.3.1 概述 6 3.3.2 使用对比 7 4 完整的实施方案 .9 4.1 开发阶段 9 4.2 预发布测试阶段 9 1 引言 1.1 目的 为了规范和制度化公司的软件版本管理制度,并保障项目开发资料的完整性和安全性,同 时明确开发源代码的控制管理流程,特此制定此规范。 1.2 管理工具 沿用 SVN 管理工具来进行开发的版本管理,源代码管理和开发资料归档。 2 现状概述 目前公司研发部门对于代码的版本管理方式较为简单,只是在每次发版后做了基线库存档, 导致所有正在开发的需求和项目都在同一个目录里面进行修改,造成每次发版的代码都有 可能包含了本次发版以外的内容。 这样会造成如下两点影响: 会有不稳定的因素存在,比如:测试只会对当前需要发版的内容进行测试,但是代码 库中同时存在多个版本和项目的代码,对于本次发版无涉及的代码没有进过测试就部 署到了服务器上,影响运行的稳定性。 一旦出现点问题不好定位,比如:出现问题后通常会优先排查发版涉及的内容,但是 部分问题是由于其他项目代码引起的。 因此,随着公司和项目规模的壮大,对软件代码版本管理提出了更高的要求。 3 现状分析 3.1 现状详述 当前代码版本管理现状如下: 1. 所有的开发都在一个目录里面做,各种需求、项目、代码、文件混杂在一起。 2. 提交测试服务器时,只考虑了编译能通过,而没有考虑功能本身有没有完成。 3. 测试出 bug 以后,会在开发目录进行修改,然后再次提交到测试服务器。这时提交的 代码就可能包含了他人对其他功能/项目的修改,而测试又只会针对此 bug 再做测试。 这就导致了除了此 bug 之外的修改可能会没有测试过就直接发布到了服务器上,引起 预发布环境不稳定并增加预发布 bug 数量。 总体来说,当前工作流程是:预发布出 bug,研发修改,再提交测试,然后预发布测 试通过的代码。整个流程也较为复杂消耗了大量人力,从而间接的增大了研发成本。 (参照下图) 开发库 测试服 开发库 测试服 再提交 预发布 发现橙色 bug提交 开发库 他人修改 的代码 修复 Bug 4. 以上描述的过程还可能出现在正式环境上,导致更严重的后果。 3.2 目标细化 结合第一章节提及的本文目标、SVN 工具的能力以及之前工作中遇到的具体问题,将本规 范的撰写目标具体细化为: 1. 提交到测试服务器的代码只能包含本次需要测试的内容。 2. 发布到预发布环境的代码只能包含这次需要测试的内容。 3. 发布到正式环境的代码只能包含本次发版的内容。 3.3 SVN 版本管理 3.3.1 概述 为了达成上述我们设定的版本管理目标,在指定具体的策略之前,我们需要理解 SVN 的 版本管理思路,这里简单将其阐述如下: 首先,SVN(Subversion)有一个很标准的目录结构,如下: project +- trunk +- branches +- tags (此目录为只读) 这个标准的目录结构在大多数的开源项目中都能看到,这套标准目录结构为软件开发提供 了一种非常好的宏观的版本库管理机制,特别是在产品类项目管理中。 其中,trunk 目录为主开发目录,branches 目录为分支开发目录,tags 目录为存档目录, 也就是基线库。其各自含义描述如下: Trunk 中文翻译为“主干”,在项目运作过程中,日常的开发和管理资料都在此目录中进行维护 和更新。 Branches 中文意思为“分支”,在项目运作过程中,用于存放阶段性的成果或者版本,这些阶段性 的成果或者版本必须是可维护的。同时,这里的开发成果物必须要保持每天一到两次把主 干上的内容合并过来。 tags 中文意思“标签”,此目录对一些阶段性的成果进行存档。此目录为只读目录,不允许进 行修改。 3.3.2 使用对比 以下假设一个开发场景,并设想当前管理机制和 SVN 管理思路下的不同流程和结果,以 便更好的理解 SVN 管理思路和带来的收益。 场景描述: 设备管理模块,其 v1.0 已经上线,正在做 v2.0 的开发。 在这时,研发在开发库中正在做 v2.0 的开发,同时备份有 v1.0 的代码,现在有一个紧急 需求,需要在 v2.0 发版之前就应用到正式环境中去。 3.3.2.1 现有的发布流程 1. 在当前开发库(v2.0 )的代码上直接修改实现紧急需求。 2. 开发完成后,将本紧急需求连同 v2.0 的半成品代码(但编译能通过)一起打包提交到 测试服务器。 3. 测试只针对此紧急需求进行测试(v2.0 的内容不测试) ,并测试通过。 4. 发预发布环境,同时测试(过程同上) 。 5. 发到正式服务器。 3.3.2.2 SVN 的发布流程 1. 2.0 开始开发,trunk 目录下此时的代码内容为 v2.0 的开发版(半成品未完成) 。 2. 基于 v1.0 的 tag 新建此紧急需求的开发分支 (branchv1.1) 此时的目录结构为 svn:/proj/ +trunk/ ( dev 2.0 ) +branches/ +dev_1.1(copy from tag/release_1.0) +tags/ +release_1.0 (copy from trunk) 3. 在 v1.1 branch 目录中进行紧急需求开发,在 trunk 目录中进行版本 v2.0 开发 。 4. 在 v1.1 branch 开发完成后,基于 v1.1 的 branch 做现有的发布流程。这时在 v1.1 的 branch 版本里只涉及了本次要发版的紧急需求,不含有其他修改,很好的规避了现 有流程中的弊端。 5. 根据需要选择性的把 v1.1 这个分支 merge 回 trunk(是否执行和具体执行时间需要根 据具体需求分析) 这是一种标准的开发模式,在很多公司中都有采用,此种模式下 trunk 永远是开发的主要 目录。 4 完整的实施方案 分为开发阶段和测试阶段来分别阐述此方案: 4.1 开发阶段 1. 每一次正式版本发布后,存档形成一个版本基线,例如 v1.0,v1.3,v1.3.3。 2. 拿到新需求(可以是多个)后,开发人员估计在下一次发版(v2.0)时能否开发完成。 确定能开发完成随 v2.0 一起发版的则直接在主线上开发。 3. 若不能确定在下一次发版时能一起发版的,或者修改很大的的情况,就需要新建一个 分支,然后在这个分支上面开发。需要注意的一点是为了保障发版前合并到主线尽量 少产生冲突,需要至少每天把主线上的代码合并到自己开发的分支中来。 4. 紧急发版(如 bug 修改)情况下,需要在下次发版前紧急再发一个版本的情况,就需 要基于最新的基线新建一个分支,然后在这个分支上面进行开发,测试,发版。完成 后再将其合并到主线上。 4.2 预发布测试阶段 预发布阶段的情况会稍微特殊一些,流程如下: 1. 在预发布的时候先在 Tag 中做一个发布版本的同步快照 2. 然后发布到预发布环境进行测试 3. 若发布测试通过要正式发版的时候,如果在发布版本上有了修改(如 bug 修复) ,需要 再往预发布环境发布的时候,就

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论