[root@ok svndata]# svn co svn://192.168.1.111/app01
# checkout项目到本机

开始规划我们的svn项目目录:

[root@ok svndata]# tree app01/ 
app01/ #项目根目录
├── branches #其他分支
│   ├── iterative- #迭代分支
│   ├── iterative--feature1 #基于迭代分支的特性1分支
│   └── iterative--feature2 #基于迭代分支的特性2分支
├── tags
└── trunk #主干分支 directories, files

主干分支上创建第一个代码文件:

[root@ok app01]# svn mkdir trunk
A         trunk
[root@ok app01]# touch trunk/hello.py    
[root@ok app01]# svn add trunk/hello.py
A         trunk/hello.py
[root@ok app01]# svn ci -m "init"
Adding         trunk
Adding         trunk/hello.py
Transmitting file data .
Committed revision 7.
[root@ok app01]# svn update
At revision 7.

首先创建分支目录:

[root@ok app01]# svn mkdir branches
A branches
[root@ok app01]# svn ci -m "创建分支目录"
Adding branches Committed revision .
[root@ok app01]# svn update
At revision .

创建分支的方式一:

[root@ok app01]# svn cp trunk/ branches/iterative-
A branches/iterative-
[root@ok app01]# svn ci -m "创建二期迭代分支"
Adding branches/iterative- Committed revision .

创建分分支的方式二:

[root@ok app01]# svn cp svn://192.168.1.111/app01/trunk \
> svn://192.168.1.111/app01/branches/iterative-2 \
> -m "创建二期迭代分支"
注意一定要svn update 否则可能会看不到更新log
[root@ok app01]# svn update
[root@ok app01]# svn log -v
------------------------------------------------------------------------
r11 | svnroot | -- :: + (Fri, Aug ) | line
Changed paths:
A /branches/iterative- (from /trunk:) 创建二期迭代分支

基于迭代分支创建特性分支:
因为一次迭代开发可能包含很多新功能,面这些个功能可以由N个开发人员来并行开发。所以最佳方案是每个功能点再建一个分支出来,实现之后再合并回二期迭代分支。

[root@ok app01]# svn cp svn://192.168.1.111/app01/branches/iterative-2 \
> svn://192.168.1.111/app01/branches/iterative-2-feature-say-hi \
> -m "2期需求:say hi功能" Committed revision .
[root@ok app01]# svn update
A branches/iterative--feature-say-hi
A branches/iterative--feature-say-hi/hello.py
Updated to revision .
[root@ok app01]# svn ci -m "2期需求:say hi功能"
[root@ok app01]# svn update
At revision .
[root@ok app01]# svn log -v
------------------------------------------------------------------------
r12 | svnroot | -- :: + (Fri, Aug ) | line
Changed paths:
A /branches/iterative--feature-say-hi (from /branches/iterative-:) 2期需求:say hi功能
------------------------------------------------------------------------
r11 | svnroot | -- :: + (Fri, Aug ) | line
Changed paths:
A /branches/iterative- (from /trunk:) 创建二期迭代分支
------------------------------------------------------------------------
r10 | svnroot | -- :: + (Fri, Aug ) | line
Changed paths:
D /branches/iterative-

实现特性功能:

[root@ok app01]# echo "加入代码实现一些功能!!!">branches/iterative--feature-say-hi/hello.py
[root@ok app01]# svn commit -m "say hi 功能"
Sending branches/iterative--feature-say-hi/hello.py
Transmitting file data .
Committed revision .
[root@ok app01]# svn update
At revision .
[root@ok app01]# svn log -v branches/iterative--feature-say-hi/hello.py
------------------------------------------------------------------------
r13 | svnroot | -- :: + (Fri, Aug ) | line
Changed paths:
M /branches/iterative--feature-say-hi/hello.py say hi 功能
------------------------------------------------------------------------
r12 | svnroot | -- :: + (Fri, Aug ) | line
Changed paths:
A /branches/iterative--feature-say-hi (from /branches/iterative-:) 2期需求:say hi功能
------------------------------------------------------------------------
r11 | svnroot | -- :: + (Fri, Aug ) | line
Changed paths:
A /branches/iterative- (from /trunk:) 创建二期迭代分支

合并回迭代分支

[root@ok app01]# svn mkdir branches/{iterative--feature1,iterative--feature2}
A branches/iterative--feature1
A branches/iterative--feature2
[root@ok app01]# svn ci -m "基于迭代分支的特性1和2分支"
Adding branches/iterative--feature1
Adding branches/iterative--feature2 Committed revision .
[root@ok app01]# cd branches/iterative--feature1/
[root@ok iterative--feature1]# svn merge svn://192.168.1.111/app01/branches/iterative-2
[root@ok iterative--feature1]# svn commit -m "合并迭代分支的修改"
Sending iterative--feature1 Committed revision .
//自测,没问是后,合并回迭代分支
[root@ok branches]# cd iterative-
[root@ok iterative-]# svn merge --reintegrate svn://192.168.1.111/app01/branches/iterative-2-feature-say-hi
--- Merging differences between repository URLs into '.':
U hello.py
[root@ok iterative-]# svn status
M .
M hello.py
[root@ok iterative-]# svn diff Property changes on: .
___________________________________________________________________
Added: svn:mergeinfo
Merged /branches/iterative--feature-say-hi:r12- Index: hello.py
===================================================================
--- hello.py (revision )
+++ hello.py (working copy)
@@ -, + @@
+加入代码实现一些功能!!!
[root@ok iterative-]# svn ci -m "合并回迭代分支"
Sending iterative-
Sending iterative-/hello.py
Transmitting file data .
Committed revision .

使用reintegrate合并后,迭代分支并没有保存特 性分支的提交历史(但是在branches目录下,能看到完整的提交历史)

迭代分支合并到 trunk 中

[root@ok trunk]# svn merge --reintegrate svn://192.168.1.111/app01/branches/iterative-2
--- Merging differences between repository URLs into '.':
U    hello.py
 U   .
[root@ok iterative-2]# svn diff Property changes on: .
___________________________________________________________________
Added: svn:mergeinfo
   Merged /branches/iterative-2-feature-say-hi:r30-33 Index: hello.py
===================================================================
--- hello.py    (revision 31)
+++ hello.py    (working copy)
@@ -0,0 +1 @@
+进行了一些修改 实现了要求达到的功能!!
[root@ok trunk]# svn ci -m "合并到turnk"
Sending        trunk
Sending        trunk/hello.py
Transmitting file data .
Committed revision 36.
[root@ok trunk]# svn update
At revision 36.
[root@ok trunk]# svn log
------------------------------------------------------------------------
r36 | svnroot | 2016-08-26 19:16:30 +0800 (Fri, 26 Aug 2016) | 1 line 合并到turnk
------------------------------------------------------------------------
r27 | svnroot | 2016-08-26 18:40:48 +0800 (Fri, 26 Aug 2016) | 1 line init
------------------------------------------------------------------------

删除特性分支

[root@ok iterative-]# svn rm svn://192.168.1.111/app01/branches/iterative-2-feature-say-hi -m ""

打一个tag:

[root@ok app01]# svn mkdir tags
A tags
[root@ok app01]# svn ci -m ""
Adding tags Committed revision .
[root@ok app01]# svn copy svn://192.168.1.111/app01/trunk svn://192.168.1.111/app01/tags/1.0 -m "1.0 Released" Committed revision .
[root@ok app01]# tree
.
├── branches
│   ├── iterative-
│   │   └── hello.py
│   ├── iterative--feature1
│   ├── iterative--feature2
│   └── iterative--feature-say-hi
│   └── hello.py
├── tags
│   └── 1.0
│   └── hello.py
└── trunk
└── hello.py directories, files
[root@ok app01]# cat tags/1.0/hello.py
进行了一些修改 实现了要求达到的功能!!

------------------------------------------

创建分支:

[root@ok branches]# svn cp -m "create branch" svn://192.168.1.111/app01/trunk svn://192.168.1.111/app01/branches/br_feature001

获得分支:

[root@ok branches]# svn co svn://192.168.1.111/app01/branches/br_feature001
A br_feature001/hello.py
Checked out revision .

合并主干上的最新代码到分支上

[root@ok br_feature001]# svn merge svn://192.168.1.111/app01/trunk

测试如下:

[root@ok br_feature001]# cat hello.py
[root@ok br_feature001]# svn merge svn://192.168.1.111/app01/trunk
--- Merging r18 into '.':
U hello.py
[root@ok br_feature001]# cat hello.py
12k

如果需要预览该刷新操做,可以使用svn mergeinfo:

[root@ok trunk]# svn mergeinfo svn://192.168.1.111/app01/trunk --show-revs eligible
r18

在分支上的开发结束,分支上的代码需要合并到主干,如下步骤:

[root@ok br_feature001]# cat hello.py
12k
[root@ok br_feature001]# svn status
M .
M hello.py
#末把分支合并到主干之前,查看代码:
[root@ok br_feature001]# cat ../../trunk/hello.py
12k
[root@ok trunk]# cat hello.py
12k
更新主干内容!!!
[root@ok trunk]# svn merge --reintegrate svn://192.168.1.111/app01/branches/br_feature001

分支合并到主干中完成后应当删该分支,因为在svn中该分支已经不能进行刷新也不能合并到主干。

[root@ok trunk]# svn log
------------------------------------------------------------------------
r19 | svnroot | -- :: + (Fri, Aug ) | line ------------------------------------------------------------------------
r18 | svnroot | -- :: + (Fri, Aug ) | line 12k
------------------------------------------------------------------------
r7 | svnroot | -- :: + (Fri, Aug ) | line init
------------------------------------------------------------------------
[root@ok trunk]# svn -r : merge svn://192.168.1.111/app01/trunk

建立tags

产品开发已经基本完成,并且通过很严格的测试,这时候我们就想发布给客户使用,发布为1.0版本

[root@ok app01]# svn copy svn://192.168.1.111/app01/trunk svn://192.168.1.111/app01/1.0 -m "Release 1.0"

Committed revision .

可以看出,就是简单的复制动做。

svn分支管理进行迭代开发的更多相关文章

  1. SVN分支管理策略个人见解

    本篇目录 前言 SVN分支管理策略 VisualSVN Server TortoiseSVN客户端 Repository的创建 Check out trunk创建新项目MyProject trunk更 ...

  2. SVN 分支管理

    平时在工作中使用 SVN 只是限于 commit,update 这样的操作,至多再 reslove 解决一下冲突,没有用过分支管理.开发过程中一般都是一个功能开发完成之后整体进行提交,而最近在项目中有 ...

  3. 版本分支管理标准 - Trunk Based Development 主干开发模型

    之前分享过<版本分支管理标准 - Git Flow>,不过在实际使用过程中, 因为其有一定的复杂度,使用起来较为繁琐,所以一些人员较少的团队并不会使用这个方案. 在这基础上,一些新的分支管 ...

  4. git 分支管理方案

    现有一般的公司项目均使用git(大多数是gitLab)管理. 开发组 我们的项目都要建立在 开发组的名下 (git.xxcompany.com/xxgroup),除需要公司内部开源的项目,都必须设置为 ...

  5. Git工程开发实践(四)——Git分支管理策略

    A successful Git branching model https://nvie.com/posts/a-successful-git-branching-model/ Git工程开发实践( ...

  6. Git学习总结(12)——多人开发 Git 分支管理详解

    1.前言 在上一篇博客中我们主要讲解了Git 远程仓库,相信大家对远程的Git仓库有一定的了解,嘿嘿.在这一篇博客中我们来在大家讲解一下Git 分支管理,这可以说是Git的又一大特点.下面我们就来学习 ...

  7. Eclipse集成Git做团队开发:分支管理

    在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...

  8. git flow开发分支管理模型

    Git Flow 是什么 Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践.Git Flow是一套使用Git进行源代码管理时的一套行为规范和简化 ...

  9. [svn] 分支开发

    参考博客: http://www.cnblogs.com/cxd4321/archive/2012/07/12/2588110.html (1)为什么要使用SVN分支开发和主干合并? 目的:在SVN下 ...

随机推荐

  1. POJ2299Ultra-QuickSort(归并排序 + 树状数组求逆序对)

    树状数组求逆序对   转载http://www.cnblogs.com/shenshuyang/archive/2012/07/14/2591859.html 转载: 树状数组,具体的说是 离散化+树 ...

  2. ExtJS入门教程06,grid分页的实现

    前面两篇内容分别介绍了extjs grid的基本用法和extjs grid异步加载数据,这篇文章将介绍extjs grid的分页. 数据量大的时候我们必须用到分页,结合上一篇的异步加载数据,今天我们就 ...

  3. java 线程---成员变量与局部变量

    关于成员变量与局部变量: 如果一个变量是成员变量,那么多个线程对同一个对象的成员变量进行操作时,他们对该成员变量是彼此影响的(也就是说一个线程对成员变量的改变会影响到另一个线程) . 如果一个变量是局 ...

  4. git 提交时保存 帐号密码

    在相应的文件夹上右键 Tortiusegit->settings->gig 点击 第1个按钮 Edit local .git/config 在打开的文档里 url = http://xx. ...

  5. centOS下yum安装配置samba

     centOS下yum安装配置samba 2010-03-29 15:46:00 标签:samba yum centOS 安装 休闲 注意:本文的原则是只将文件共享应用于内网服务器,并让将要被共享的目 ...

  6. CentOS 设置网络(修改IP&修改网关&修改DNS)--update.14.08.15

    自己电脑上装的虚拟机用桥接方式连接物理机,虚拟机重启后ip会发生变化,非常阻碍Xshell的连接和hosts指定的dns. 通过修改IP为static模式,保持IP不变. ============== ...

  7. linux 多线程 LinuxThreads(转)

    Linux 线程实现机制分析 http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/ 上面文章分析的非常透彻 按照教科书上的定义,进程是 ...

  8. 使用注解实现IOC

    在biz业务处理类实现类中 /** * 用户业务类,实现对User功能的业务管理 */ @Service("userBiz") public class UserBiz imple ...

  9. oracle经典书籍推荐 转

    很多网友询问如何选择入门书籍,学Oracle有什么好书,这里给出一些常见书籍的介 绍.首先声明,本文只涉及国外作品,因为国内的作品好的极少,大多是拼凑之作. 提到入门学习,我又得搬Tom(Thomas ...

  10. win7 vmware 无法使用usb

    只有在win7下才会有这个问题,在xp下没有. 原因是: win7的主机上禁用了vmare usb arbitration(仲裁) service. 在主机上启用这个服务 重启即可. 如果无法启用vm ...