svn分支管理进行迭代开发

[[email protected] svndata]# svn co svn://192.168.1.111/app01
# checkout项目到本机

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

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

6 directories, 0 files

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

[[email protected] app01]# svn mkdir trunkA         trunk[[email protected] app01]# touch trunk/hello.py    [[email protected] app01]# svn add trunk/hello.py A         trunk/hello.py[[email protected] app01]# svn ci -m "init"Adding         trunkAdding         trunk/hello.pyTransmitting file data .Committed revision 7.[[email protected] app01]# svn updateAt revision 7.

创建我们的第一个迭代分支:

[[email protected] app01]# svn mkdir branches
A         branches
[[email protected] app01]# svn ci -m "创建分支目录"
Adding         branches

Committed revision 8.
[[email protected] app01]# svn update
At revision 8.

创建分分支的方式一:

[[email protected] app01]# svn cp trunk/ branches/iterative-2
A         branches/iterative-2
[[email protected] app01]# svn ci -m "创建二期迭代分支"
Adding         branches/iterative-2

Committed revision 9.

创建分分支的方式二:

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

创建二期迭代分支

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

[[email protected] 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 12.
[[email protected] app01]# svn update
A    branches/iterative-2-feature-say-hi
A    branches/iterative-2-feature-say-hi/hello.py
Updated to revision 12.
[[email protected] app01]# svn ci -m "2期需求:say hi功能"
[[email protected] app01]# svn update
At revision 12.
[[email protected] app01]# svn log -v
------------------------------------------------------------------------
r12 | svnroot | 2016-08-26 12:34:40 +0800 (Fri, 26 Aug 2016) | 1 line
Changed paths:
   A /branches/iterative-2-feature-say-hi (from /branches/iterative-2:11)

2期需求:say hi功能
------------------------------------------------------------------------
r11 | svnroot | 2016-08-26 12:22:45 +0800 (Fri, 26 Aug 2016) | 1 line
Changed paths:
   A /branches/iterative-2 (from /trunk:8)

创建二期迭代分支
------------------------------------------------------------------------
r10 | svnroot | 2016-08-26 12:21:48 +0800 (Fri, 26 Aug 2016) | 1 line
Changed paths:
   D /branches/iterative-2

实现特性功能:

[[email protected] app01]# echo "加入代码实现一些功能!!!">branches/iterative-2-feature-say-hi/hello.py
[[email protected] app01]# svn commit -m "say hi 功能"
Sending        branches/iterative-2-feature-say-hi/hello.py
Transmitting file data .
Committed revision 13.
[[email protected] app01]# svn update
At revision 13.
[[email protected] app01]# svn log -v branches/iterative-2-feature-say-hi/hello.py
------------------------------------------------------------------------
r13 | svnroot | 2016-08-26 12:38:06 +0800 (Fri, 26 Aug 2016) | 1 line
Changed paths:
   M /branches/iterative-2-feature-say-hi/hello.py

say hi 功能
------------------------------------------------------------------------
r12 | svnroot | 2016-08-26 12:34:40 +0800 (Fri, 26 Aug 2016) | 1 line
Changed paths:
   A /branches/iterative-2-feature-say-hi (from /branches/iterative-2:11)

2期需求:say hi功能
------------------------------------------------------------------------
r11 | svnroot | 2016-08-26 12:22:45 +0800 (Fri, 26 Aug 2016) | 1 line
Changed paths:
   A /branches/iterative-2 (from /trunk:8)

创建二期迭代分支

合并回迭代分支

[[email protected] app01]# svn mkdir branches/{iterative-2-feature1,iterative-2-feature2}
A         branches/iterative-2-feature1
A         branches/iterative-2-feature2
[[email protected] app01]# svn ci -m "基于迭代分支的特性1和2分支"
Adding         branches/iterative-2-feature1
Adding         branches/iterative-2-feature2

Committed revision 14.
[[email protected] app01]# cd branches/iterative-2-feature1/
[[email protected] iterative-2-feature1]# svn merge svn://192.168.1.111/app01/branches/iterative-2
[[email protected] iterative-2-feature1]# svn commit -m "合并迭代分支的修改"
Sending        iterative-2-feature1

Committed revision 15.
//自测,没问是后,合并回迭代分支
[[email protected] branches]# cd iterative-2
[[email protected] iterative-2]# svn merge --reintegrate svn://192.168.1.111/app01/branches/iterative-2-feature-say-hi
--- Merging differences between repository URLs into ‘.‘:
U    hello.py
[[email protected] iterative-2]# svn status
 M      .
M       hello.py
[[email protected] iterative-2]# svn diff

Property changes on: .
___________________________________________________________________
Added: svn:mergeinfo
   Merged /branches/iterative-2-feature-say-hi:r12-15

Index: hello.py
===================================================================
--- hello.py    (revision 13)
+++ hello.py    (working copy)
@@ -0,0 +1 @@
+加入代码实现一些功能!!!
[[email protected] iterative-2]# svn ci -m "合并回迭代分支"
Sending        iterative-2
Sending        iterative-2/hello.py
Transmitting file data .
Committed revision 16.

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

迭代分支合并到 trunk 中

[[email protected] trunk]# svn merge --reintegrate svn://192.168.1.111/app01/branches/iterative-2--- Merging differences between repository URLs into ‘.‘:U    hello.py U   .[[email protected] 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 @@+进行了一些修改 实现了要求达到的功能!![[email protected] trunk]# svn ci -m "合并到turnk"Sending        trunkSending        trunk/hello.pyTransmitting file data .Committed revision 36.[[email protected] trunk]# svn updateAt revision 36.[[email protected] 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------------------------------------------------------------------------

删除特性分支

[[email protected] iterative-2]# svn rm svn://192.168.1.111/app01/branches/iterative-2-feature-say-hi -m ""

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

创建分支:

[[email protected] branches]# svn cp -m "create branch" svn://192.168.1.111/app01/trunk svn://192.168.1.111/app01/branches/br_feature001

获得分支:

[[email protected] branches]# svn co svn://192.168.1.111/app01/branches/br_feature001
A    br_feature001/hello.py
Checked out revision 17.

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

[[email protected] br_feature001]# svn merge svn://192.168.1.111/app01/trunk

测试如下:

[[email protected] br_feature001]# cat hello.py
[[email protected] br_feature001]# svn merge svn://192.168.1.111/app01/trunk
--- Merging r18 into ‘.‘:
U    hello.py
[[email protected] br_feature001]# cat hello.py
12k

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

[[email protected] trunk]# svn mergeinfo svn://192.168.1.111/app01/trunk --show-revs eligible
r18

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

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

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

[[email protected] trunk]# svn log
------------------------------------------------------------------------
r19 | svnroot | 2016-08-26 16:10:20 +0800 (Fri, 26 Aug 2016) | 1 line

------------------------------------------------------------------------
r18 | svnroot | 2016-08-26 15:57:32 +0800 (Fri, 26 Aug 2016) | 1 line

12k
------------------------------------------------------------------------
r7 | svnroot | 2016-08-26 12:05:49 +0800 (Fri, 26 Aug 2016) | 1 line

init
------------------------------------------------------------------------
[[email protected] trunk]# svn -r 18:19 merge svn://192.168.1.111/app01/trunk

建立tags

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

[[email protected] app01]# svn copy svn://192.168.1.111/app01/trunk svn://192.168.1.111/app01/1.0 -m "Release 1.0"

Committed revision 20.

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

时间: 2024-10-06 00:30:51

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

SVN分支管理策略个人见解

本篇目录 前言 SVN分支管理策略 VisualSVN Server TortoiseSVN客户端 Repository的创建 Check out trunk创建新项目MyProject trunk更新提交更新,迭代版本创建Tag V1.0 基于Tag的Hotfix Branch Hotfix Branch改动Marge(合并)到trunk中同时创Tag_V1.1进行发布 定制化分支Customize branch 总结 前言 使用svn做为源码管理工具已有几年,但一直都只是使用到了trunk.

SVN 分支管理

平时在工作中使用 SVN 只是限于 commit,update 这样的操作,没有用过分支管理.开发过程中一般都是一个功能开发完成之后整体进行提交,而最近在项目中有一个比较大并且开发周期比较长的功能,所以在功能没有完成之前不方便进行提交,所以想到了使用分支管理,边学边用(所以工作最好一定要选开发流程规范的公司). /*环境: * 服务器操作系统 - CentOS 6.6 * SVN 服务器 - Subversion 1.6.11 * 客户端操作系统 - Windows 10 64位 * SVN 客

Git分支管理实战

Git分支管理实战: 使用了Git之后,Git确实比TFS 好用,首先它很轻巧,分支之间切换基本在秒级,分支创建也很方便,但由于方便快捷,最近我们一直在因为分支管理混乱而陷入无穷的痛苦之中, 在此痛定思痛,觉得借鉴网上一个好的方案来管理分支. 一.主分支: 实际开发中,主要存在两条主分支,Master和Develop 分支,这两个分支的生命周期是整个项目周期. 他们有如下特点: 1.Master和develop分支自创建之后都不会删除,会随着项目的增长不断往里面添代码. 2.Master分支是G

git 分支管理方案

现有一般的公司项目均使用git(大多数是gitLab)管理. 开发组 我们的项目都要建立在 开发组的名下 (git.xxcompany.com/xxgroup),除需要公司内部开源的项目,都必须设置为 私有(private) ,只对团队内部开源. ssh key 使用前建议大家在本地用自己的公司邮箱配置ssh key,并讲ssh key 添加到git系统的个人页,(方法如下: https://segmentfault.com/a/1190000002645623) 虽然有一些公司的git 仓库不

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

Git工程开发实践(四)--Git分支管理策略 一.Git版本管理的挑战 Git是非常优秀的版本管理工具,但面对版本管理依然有非常大得挑战.工程开发中,开发者彼此的代码协作必然带来很多问题和挑战:A.如何开始一个Feature开发,而不影响其它Feature?B.由于很容易创建新分支,分支多了如何管理,时间久了,如何知道每个分支是干什么的?C.哪些分支已经合并回了主干?D.如何进行Release的管理?开始一个Release的时候如何冻结Feature, 如何在Prepare Release的时

SVN - 分支开发

参考博客: http://www.cnblogs.com/cxd4321/archive/2012/07/12/2588110.html (1)为什么要使用SVN分支开发和主干合并? 目的:在SVN下进行版本升级模式的开发 需求: 1.项目目前已经有比较稳定的版本(release_version_1.0),需要在稳定版本上面做程序的升级 2.升级开发时,可能有10个程序员同时在修改程序,且都需要对绝大多数文件做大部分改动 3.恶心的技术经理说:现在需要把数据库换成hbase,但是没有更改完毕之前

Git开发分支管理

远程仓库有master和dev分支的情况 1. 克隆代码 git clone https://somewhere.com/master-dev.git 2. 查看所有分支 git branch --all # 默认有了dev和master分支,所以会看到如下三个分支 # master[本地主分支] origin/master[远程主分支] origin/dev[远程开发分支] # 新克隆下来的代码默认master和origin/master是关联的,也就是他们的代码保持同步 # 但是origin

git 教程(12)--分支管理

分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN! 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了.如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险. 现在有了分支,就不用怕了.你

GIt分支管理策略

大纲: 1.前言 2.创建分支 3.切换分支 4.合并分支(快速合并) 5.删除分支 6.分支合并冲突 7.合并分支(普通合并) 8.分支管理策略 9.团队多人开发协作 10.总结 注,测试机 CentOS 5.5 x86_64,Git 服务器版本:git version 1.8.2.1,客户端版本:git version 1.9.2.msysgit.0.所有软件请到这里下载:http://msysgit.github.io/. 1.前言 在上一篇博客中我们主要讲解了Git 远程仓库,相信大家对