主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

转载 2016年12月01日 12:49:38

财经大爆炸 2016-11-30 19:05

以svn为例,git的master相当于trunk,dev分支相当于branches

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

trunk:是用来做主方向开发的一直向前进行,一个新模块的开发,这个时候就放在trunk,当模块开发完成后,需要修改,就用branch。

branch:是用来做并行开发的,这里的并行是指和trunk进行比较。

tag:是用来做一个milestone(里程碑)的,不管是不是发布版本,但都是一个可用的版本,不需要修改如果要修改就要选一个tag进行branche开发。

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

为什么要分3个目录?且都是重复的代码Copy有意义吗?来看下下面这个例子就明白这样做的好处了。

例如:开发一个聊天软件QQ,第一期只要求软件具有基本的聊天功能,后期会加入视屏聊天、魔法表情、换皮肤等功能。

当第一期开发完,经测试人员测试后没问题。此时应该给予当前代码库打tag命名为QQ_tag_release_v1.0.0,同时trunk如火如荼进入v2.0.0开发,但是此时经广大用户反馈v1.0.0的QQ登录后经常闪退,由于v2.0.0正在开发即使bug改了也发布不了。那么就要基于QQ_tag_release_v1.0.0的标记(tag)做一个分支(branch)命名为QQ_branch_bugfix_v1.0.0并基于这个分支快速进行BUG修改,等到BUG修改结束后做一个tag命名为QQ_tag_release_v1.0.1,根据需要决定QQ_branch_bugfix_v1.0.0是否合并(Merge)并入主干(trunk)。

步骤:

1、新建svn仓库单项目/多项目仓库都可以,结构如下图这样

2、新建资源库

填写URL仓库地址点击“Finish”

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

如下

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

新建qq项目导入svn的trun目录(选中项目右键Team-->Share Projects...)

导入后项目后的svn仓库如下

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

由于紧锣密鼓的工作v1.0.0终于开发完(v1.0.0只有基本的聊天功能),经测试没有发现问题可以提供给用户使用,同时在此代码库上打一个tag版本命名为QQ_tag_release_v1.0.0

选中项目右键 “Team--> 分支/标记... ” 填写要打tag的版本号后点击”Next“

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

下一步”Next“

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

填写注释后点击”Finish“

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

这时svn资源库tag目录下会多了个QQ_tag_release_v1.0.0

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

同时trunk如火如荼进入v2.0.0开发,视屏聊天功能正在开发

看一下这时的svn资源库

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

此时经广大用户反馈v1.0.0的QQ登录后经常闪退,由于v2.0.0正在开发即使bug改了也发布不了。那么就要基于QQ_tag_release_v1.0.0的标记(tag)做一个分支(branch)命名为QQ_branch_bugfix_v1.0.0

选择项目右键 ”Team“-->”切换(S...)“ 选择tags的QQ_tag_release_v1.0.0

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

更改路径后点击”OK“

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

已经切换到标记的QQ_tag_release_v1.0.0

接下来要以QQ_tag_release_v1.0.0 为基础创建一个branch名为QQ_branch_bugfix_v1.0.0并基于这个分支快速进行BUG修改

选中项目右键 “Team--> 分支/标记... ” 点击 ”浏览...“ 选择branches目录

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

填写要创建分支(branch)名为 ”QQ_branch_bugfix_v1.0.0“ 后点击 ”Next“

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

点击”Next“

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

填写注释后选中 ”切换工作复本为新的分支/标记“ 后 点击 ”Finish“

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

看下工作空间的和svn资源库的变化

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

在branch分支名为 ”QQ_branch_bugfix_v1.0.0“ 中修改bug

提交修改bug后的代码

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

提交后

闪退bug已经修改可以提供给用户使用了,接下来要再打一个tag命名为 ”QQ_tag_release_v1.0.1“

选中名为”QQ_branch_bugfix_v1.0.0“ 的分支项目右键 “Team--> 分支/标记... ” 点击 ”浏览...“ 选择tags目录

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

填写要创建标记(tag)名为 ”QQ_tag_release_v1.0.1“ 后点击 ”Next“

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

点击”Next“

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

填写注释信息后点击”Finish“

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

来看看资源库中有什么变化,tags目录下多了一个名为”QQ_tag_release_v1.0.1“ 的标记

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

下面演示 将 分支(branches) 合并到 主干(trunk)

根据需要决定将分支名为 ”QQ_branch_bugfix_v1.0.0“ 的branch 合并(Merge)并入主干(trunk)。

步 骤:

1. 要想将分支合并到主干,首先需要切换到主干。在项目上面点右键,选择Team — 切换,URL地址为主干的访问路径

(略过。。。 上面有)

2. 在项目上面点右键,选择 ”Team“--> ”合并(M)...“ ,选中“Reinitegrate a branch”。

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

3. 选择要合并到主干的分支”QQ_branch_bugfix_v1.0.0“

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

4. 点击”Finish“ 结束合并

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

5. 点击”OK“

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

6. 如果想要撤销合并选中项目右键”Undo merge...“

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

7. trunk中的qq项目下就会多了从分支”QQ_branch_bugfix_v1.0.0“里Merge合并的代码

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

8. 提交合并后的代码

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

9. 提交后如下

主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解

一般的,我们的所有的开发都是基于trunk进行开发,当一个版本/release开发告一段落(开发、测试、文档、制作安装程序、打包等)结束后,代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag。当下一个版本/阶段的开发任务开始,继续在trunk进行开发。此时,如果发现了上一个已发行版本(ReleasedVersion)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(DevelopingVersion)无法满足时间要求,这时候就需要在上一个版本上进行修改了。应该基于发行版对应的tag,做相应的分支(branch)进行开发。

SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤

使用场景: 假如你的项目(这里指的是手机客户端项目)的某个版本(例如1.0版本)已经完成开发、测试并已经上线了,接下来接到新的需求, 新需求的开发需要修改多个文件中的代码,当需求已经开始开发一段时间的...
  • vbirdbest
  • vbirdbest
  • 2016年04月11日 17:02
  • 73379

SVN的branch tag trunk的用法详解

当一个团队进行项目开发时,往往会遇到这两个问题,1、正在开发新版本的时候,发现上一个版本有bug,这时候怎么办;2、多人如何同时开发一个项目,如何解决同步问题,这边文章介绍主要解决了这两个方面的问题,...
  • u010937230
  • u010937230
  • 2016年12月01日 10:05
  • 1146

SVN trunk(主干)branch(分支)tag(标记)

SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤 ...
  • hyupeng1006
  • hyupeng1006
  • 2018年01月04日 15:49
  • 31

SVN 主干(trunk)、分支(branch )、标记(tag)

主干(trunk)、分支(branch )、标记(tag) 在SVN中Branch/tag在一个功能选项中,在使用中也往往产生混淆。   在实现上,branch和tag,对于svn都是使用copy实...
  • jimmyzj123456
  • jimmyzj123456
  • 2014年02月11日 14:07
  • 396

SVN中trunk、branch、tag区别

虽然一直都在用svn作项目管理,但是一直都是傻傻的分不清主干、分支。今天小编就来详细介绍一下: 【branch】 按照Subversion的说法,一个branch就是主干项目的一个拷贝,如下图所示: ...
  • u013035612
  • u013035612
  • 2016年09月11日 21:21
  • 2564

svn三大目录trunk、branch和tag

SVN中Branch和tag的比较 在SVN中Branch和tag在一个功能选项中,在使用中也往往产生混淆。在实现上,branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限上和...
  • u012643122
  • u012643122
  • 2015年07月25日 17:34
  • 2849

svn分支开发与主干合并(branch & merge)

下面我将step by step地演示如何一次完整的branching和merging,包括创建分支、分支开发、分支和主线同步,分支合并到主线的全过程,甚至包括如何在本地创建一个测试用的reposit...
  • bbirdsky
  • bbirdsky
  • 2014年04月28日 09:19
  • 91254

SVN之Cornerstone从trunk、tag、branch到merge

版本管理思想 版本管理者(一般是项目经理)首先要创建SVN项目分类 trunk/tags/branches 项目的整个生命周期肯定都存放在trunk中。 tags文件夹下存放的都是各版本上线后的稳定版...
  • Mayerlucky
  • Mayerlucky
  • 2017年02月13日 18:22
  • 2408

SVN - 主干/分支 cornerstone 参考

一个大项目在开发中可能会拆分成几个小项目,分别分去,同时共通的部分再由人做,做完后再统一合并。同时,在开发中,共通的部分修改后,其它人要保持同步。 这种情况反应到SVN的分支/合并功能上,再贴切...
  • leikezhu1981
  • leikezhu1981
  • 2016年12月07日 15:47
  • 744

SVN 主干(trunk)、分支(branch )、标记(tag) 的使用

主干(trunk)、分支(branch )、标记(tag) 在SVN中Branch/tag在一个功能选项中,在使用中也往往产生混淆。   在实现上,branch和tag,对于svn都是使用...
  • alinagebaba
  • alinagebaba
  • 2016年04月06日 15:30
  • 317
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解
举报原因:
原因补充:

(最多只允许输入30个字)