IT星球论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 46|回复: 0

如何利用 svn 分支管理进行迭代开发

[复制链接]

17

主题

1

好友

267

积分

IT初级专家

Rank: 3Rank: 3

升级  22.33%

发表于 2018-8-9 11:13:54 |显示全部楼层
如何利用 svn 分支管理进行迭代开发
一直在 linux 和 mac 上使用 git 进行项目代码管理,首次在 linux 上使用 svn 进行开发 (之前都是在 windows 上使用 SVN 图形管理工具)。
建立一个测试项目,熟悉一下 SVN 的命令行操作, 主要是分支管理。
场景
目前线上运行着主干分支(trunk)的代码,现在要进行2期的迭代开发(为期两周)。
如何保证,在开发新需求的同时,不影响主干分支的紧急 bug 修复; 并同时开发不紧急的需求。
初始化项目
SVN China 注册一个测试用的账号,新建一个项目。
checkout 项目到本机
svn checkout http://www.svnchina.com/svn/sunzhongwei --username sunzhongwei
开始规划我们的 SVN 项目目录
sunzhongwei (项目根目录)|_trunk (主干分支)|_tags|_branches (IT论坛分支)  |_iterative-2 (迭代分支)  |_iterative-2-feature1 (基于迭代分支的特性1分支)  |_iterative-2-feature2 (基于迭代分支的特性2分支)主干分支上创建第一个代码文件cd sunzhongweimkdir trunktouch trunk/hello.pysvn add trunksvn commit -m "init"svn updatesvn log
tips: 不要忘了 svn update,否则 svn log 无法看到提交历史。
此时,SVN China 上也能同时看到对应的提交。
创建我们的第一个迭代分支
首先创建分支目录
mkdir branchessvn add branchessvn commit -m "创建分支目录"svn update
实际上有两种创建分支的方式
第一种方式
svn copy trunk branches/iterative-2svn statussvn commit -m "创建二期迭代分支"svn update
第二种方式
svn copy http://www.svnchina.com/svn/sunzhongwei/trunk          http://www.svnchina.com/svn/sunzhongwei/branches/iterative-2          -m "创建二期迭代分支"svn update
推荐使用第二种方式,原因是不需要有工作拷贝。
注意,svn copy 之后,不要忘了 svn update 来更新本地代码。
$ svn log -v------------------------------------------------------------------------r3 | sunzhongwei | 2015-03-03 14:23:27 +0800 (Tue, 03 Mar 2015) | 1 lineChanged paths:   A /branches/iterative-2 (from /trunk:2)创建二期迭代分支------------------------------------------------------------------------r2 | sunzhongwei | 2015-03-03 14:21:52 +0800 (Tue, 03 Mar 2015) | 1 lineChanged paths:   A /branches创建分支目录------------------------------------------------------------------------r1 | sunzhongwei | 2015-03-03 12:30:35 +0800 (Tue, 03 Mar 2015) | 2 linesChanged paths:   A /trunk   A /trunk/hello.pyinit------------------------------------------------------------------------基于迭代分支创建特性分支
因为一次迭代开发可能包含N多新功能,而这 N 个功能可能由 N 个开发人员来并行开发。 所以最佳方案是每个功能点再建一个分支出来,实现之后再合并回二期迭代分支。
svn copy http://www.svnchina.com/svn/sunzhongwei/branches/iterative-2          http://www.svnchina.com/svn/sunz ... ve-2-feature-say-hi          -m "2期需求:say hi 功能"svn update
实现特性功能
vim branches/iterative-2-feature-say-hi/hello.py// 做一些修改svn commit -m "say hi 功能"svn update
可以看到,修改的文件修改历史中包含了所有祖先分支的操作。
$ svn log -v hello.py ------------------------------------------------------------------------r5 | sunzhongwei | 2015-03-03 14:48:50 +0800 (Tue, 03 Mar 2015) | 1 lineChanged paths:   M /branches/iterative-2-feature-say-hi/hello.pysay hi 功能------------------------------------------------------------------------r4 | sunzhongwei | 2015-03-03 14:46:39 +0800 (Tue, 03 Mar 2015) | 1 lineChanged paths:   A /branches/iterative-2-feature-say-hi (from /branches/iterative-2:3)2期需求:say hi 功能------------------------------------------------------------------------r3 | sunzhongwei | 2015-03-03 14:23:27 +0800 (Tue, 03 Mar 2015) | 1 lineChanged paths:   A /branches/iterative-2 (from /trunk:2)创建二期迭代分支------------------------------------------------------------------------r1 | sunzhongwei | 2015-03-03 12:30:35 +0800 (Tue, 03 Mar 2015) | 2 linesChanged paths:   A /trunk   A /trunk/hello.pyinit
合并回迭代分支
cd branches/iterative-2svn updatecd branches/iterative-2-feature1/svn merge http://www.svnchina.com/svn/sunzhongwei/branches/iterative-2svn commit -m "合并迭代分支的修改"// 自测,没问题后,合并回迭代分支cd branches/iterative-2svn merge --reintegrate http://www.svnchina.com/svn/sunz ... 2-feature-say-hisvn status// 对比合并发生的修改svn diffsvn commit -m "合并回迭代分支"
这时候你会发现使用 reintegrate 合并后,迭代分支并没有保存特性分支的提交历史 (但是在 branches 目录下,能看到完整的提交历史)
$ svn log------------------------------------------------------------------------r7 | sunzhongwei | 2015-03-03 16:06:36 +0800 (Tue, 03 Mar 2015) | 2 lines合并回迭代分支------------------------------------------------------------------------r3 | sunzhongwei | 2015-03-03 14:23:27 +0800 (Tue, 03 Mar 2015) | 1 line创建二期迭代分支------------------------------------------------------------------------r1 | sunzhongwei | 2015-03-03 12:30:35 +0800 (Tue, 03 Mar 2015) | 2 linesinit------------------------------------------------------------------------
删除特性分支
svn rm  http://www.svnchina.com/svn/sunz ... 2-feature-say-hisvn update
然后采用相同的策略将迭代分支合并到 trunk 中。
如何与测试团队合作
  • 从 trunk 上建立开发 branch
  • 开发完成后,merge trunk 代码到 branch 上
  • 提交 branch 给测试部门进行测试
  • 测试完成后,先锁定 trunk,避免IT论坛人并行合并带来的问题。然后,将 branch 合并入 trunk. 然后通知测试团队切到 trunk 上测试。
  • 测试通过后,发布 trunk。trunk 代码解锁,打 tag 归档。
参考如何利用 svn 分支管理进行迭代开发
该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

回顶部