-
trunk和branches的那些事---很多SCM都没弄明白的
2014-07-01 14:11:46敏捷的时代,trunk和branch的那些事。最近生病导致博客又没更新,没办法,虽然工作大量的实用自动化。但是偶尔有点事情还是要人来解决。
成都天气又多变。。哎。。。病的不轻。
今天一早就跟一个同行讨论了下“合并分支”,虽然我项目上没有这个词语。但是从back to the point的角度出发,这个“合并分支”就是让trunk和某branch保持一致的代码的事情。
今天又有空就来念叨念叨这个。
老规矩,上图。
这里举个例子,假设微软开发一个windows in future 的系统。基于上次写的trunk,branch的规则。
这里的branch 1.0就是第一个可以交付用户A使用的版本,那么这个branch上做完测试后,会打tag来发布。
用户A收到这个版本后肯定会大大的使用一番,并且提出很多新的改进要求以及提出软件BUG所在。
我们的团队要做啥呢?
第一个就是把BUG修复,把新的要求加入到新需求中进行开发。然后把bug的correction,必须同时提交到branch 1.0和当时最新的trunk上。即使trunk代码跟branch1.0可能会有很大出入,也必须重构correction以后提交trunk。
那么trunk上就有了branch1.0找出来的bug所对应的新correction.
在看看新需求,新的需求,要记得在trunk上开发,因为trunk时刻在更新,你的把新东西丢到新的上面。开发完后,记得把整个feature提交trunk,并且做tag出来让测试团队测试,测试过了,你的新feature才算OK了。
那么此时的trunk已经包括了branch1.0上面所有被客户提出的新需求、新bug的correction。是时候拉个branch2.0给客户A使用了。客户一定会再次提出新的需求,新的bug,那么我们的团队需要把上面的事情,再来一遍。
直到什么时候?直到客户满意的时候:)。
有人一定问,我的软件N个客户使用肿么办?
我想说的是,一个客户的你研究懂了,多个客户的只是多做几遍重复的事情而已了。嘿嘿。为啥我喜欢说而已,因为咱SCM懂自动化啊!哈哈!
-
代码管理中Trunk、Branches、Tags的区别和联系
2019-11-04 09:58:50我们可以将这三者想象成一棵树的组成部分 trunk为树干 branches为树枝 tags为整棵树 trunk用于主线开发 ...在branches开发时,要时常从trunk中更新到branches中,用于同步 当branches开发完成时,就...- 我们可以将这三者想象成一棵树的组成部分
- trunk为树干
- branches为树枝
- tags为整棵树
-
trunk用于主线开发
-
branches用于定制版本、修复bugs、并行开发等使用
-
tags用于存放release版本,阶段性代码,不用于修改和commit
-
在branches开发时,要时常从trunk中更新到branches中,用于同步
-
当branches开发完成时,就可以将branches重新merge到trunk中
-
SVN分支和合并(trunk、branches、tags)
2016-10-18 23:28:10尽管svn没有作强制要求,但是一般svn版本库目录建议创建trunk、branches和tags三个目录。在实际操作时,trunk主干版本要时刻保持干净,即随时可以基于这个版本进行修改并将应用部署上线。branches是分支目录,存放...原文地址:原文链接地址
尽管svn没有作强制要求,但是一般svn版本库目录建议创建trunk、branches和tags三个目录。在实际操作时,trunk主干版本要时刻保持干净,即随时可以基于这个版本进行修改并将应用部署上线。branches是分支目录,存放并行开发的项目代码,因为分支是主干的廉价拷贝(相当只是提交了一次主干版本,增加了一个版本号, 并没有取出版本库作镜像拷贝),所以你可以放心建立很多分支版本。不过 Subversion不支持跨版本库的拷贝,当使用svn copy时你只能在同一个版本库内操作。tags目录存放trunk某个的快照,比如说release-1.0即trunk处于1.0版本时的快照。
使用svn来作团队的代码管理,那么分支和合并将是非常常用的操作。下面是一个简单的示例。
1. 创建分支。这里假设你要负责一个叫theme的项目,分支号1.7.2。
1. #这里的localhost是svn服务器地址
2. svn copy -m "1.7.2 - theme" svn://localhost/www/trunk svn://localhost/www/branches/branch1.7.2-theme
3. svn co svn://localhost/www/branches/branch1.7.2-theme
2. 从trunk中merge到分支。忙了一个星期终于开发完了,但是开发期间trunk版本有过改动,部署上线前你需要合并trunk的代码。
1. #branch1.7.2-theme是分支目录,注意不可以进到分支子目录
2. cd branch1.7.2-theme
3. #前面的12972是开分支之前trunk的版本号,后面的12991是merge时trunk的版本号
4. svn merge -r 12972:12991 svn://localhost/www/trunk
如果有冲突选择p(postpone),merge完了之后使用svn st|grep ^C查看冲突文件,然后比对修改冲突文件。解决冲突后再check in ,信息写上执行的merge操作。
1. svn ci -m 'svn merge -r 12972:12991 svn://localhost/www/trunk'
3. 从分支merge到trunk。上线测试完毕,你很幸运,一切都如预期正常,这时就要将分支回归trunk,将trunk更新到最新。
1. #先从trunk checkout一份新鲜的代码,然后cd到该版本目录下
2. svn co svn://localhost/www/trunk
3. cd trunk
4. #12973是分支开始的版本号,13006是分支结束的版本号
5. svn merge -r 12973:13006 svn://localhost/www/branches/branch1.7.2-theme
如步骤2一样解决冲突,解决冲突后再check in,信息写上执行的merge操作。
1. svn ci -m "svn merge -r 12973:13006 svn://localhost/www/branches/branch1.7.2-theme" -
SVN trunk, branches and tags
2014-03-18 19:09:14在本篇文章中, 我将会详细说明我是如何应用SVN trunk(树干)、branches(分支)和tags(标记)。这种方法同样被称为“branch always”,两者非常接近。可能我所介绍的并不是最好的方法,但是它会给新手一些解释说明,告诉...在本篇文章中, 我将会详细说明我是如何应用SVN trunk(树干)、branches(分支)和tags(标记)。这种方法同样被称为“branch always”,两者非常接近。可能我所介绍的并不是最好的方法,但是它会给新手一些解释说明,告诉他们trunk、branches和tags是什么,并且该如何去应用它们。
当然,如果本文有些要点需要澄清/确认,亦或者有一些错误的观点,还请你评论,自由发表自己的观点。
——简单的对比
SVN的工作机制在某种程度上就像一颗正在生长的树:
- 一颗有树干和许多分支的树
- 分支从树干生长出来,并且细的分支从相对较粗的树干中长出
- 一棵树可以只有树干没有分支(但是这种情况不会持续很久,随着树的成长,肯定会有分支啦,^^)
- 一颗没有树干但是有很多分支的树看起来更像是地板上的一捆树枝
- 如果树干患病了,最终分支也会受到影响,然后整棵树就会死亡
- 如果分支患病了,你可以剪掉它,然后其他分支还会生长出来的哦!
- 如果分支生长太快了,对于树干它可能会非常沉重,最后整棵树会垮塌掉
- 当你感觉你的树、树干或者是分支看起来很漂亮的时候,你可以给它照张相,这样就就可以记得它在那时是多么的赞。
——Trunk
Trunk是放置稳定代码的主要环境,就好像一个汽车工厂,负责将成品的汽车零件组装在一起。
以下内容将告诉你如何使用SVN trunk:
-
除非你必须处理一些容易且能迅速解决的BUG,或者你必须添加一些无关逻辑的文件(比如媒体文件:图像,视频,CSS等等),否则永远不要在trunk直接做开发
-
不要因为特殊的需求而去对先前的版本做太大的改变,如何相关的情况都意味着需要建立一个branch(如下所述)
-
不要提交一些可能破坏trunk的内容,例如从branch合并
-
如果你在某些时候偶然间破坏了trunk,bring some cake the next day (”with great responsibilities come… huge cakes”)
——Branches
一个branch就是从一个SVN仓库中的子树所作的一份普通拷贝。通常情况它的工作类似与UNIX系统上的符号链接,但是你一旦在一个SVN branch里修改了一些文件,并且这些被修改的文件从拷贝过来的源文件独立发展,就不能这么认为了。当一个branch完成了,并且认为它足够稳定的时候,它必须合并回它原来的拷贝的地方,也就是说:如果原来是从trunk中拷贝的,就应该回到trunk去,或者合并回它原来拷贝的父级branch。
以下内容将告诉你如何使用SVN branches:
-
如果你需要修改你的应用程序,或者为它开发一个新的特性,请从trunk中创建一个新的branch,然后基于这个新的分支进行开发
-
除非是因为必须从一个branch中创建一个新的子branch,否则新的branch必须从trunk创建
-
当你创建了一个新branch,你应当立即切换过去。如果你没有这么做,那你为什么要在最初的地方创建这个分支呢?
——Tags
从表面上看,SVN branches和SVN tags没有什么差别,但是从概念上来说,它们有许多差别。其实一个SVN tags就是上文所述的“为这棵树照张相”:一个trunk或者一个branch修订版的命名快照。
以下内容将告诉你如何使用SVN tags:
-
作为一个开发者,永远不要切换至、取出,或者向一个SVN tag提交任何内容:一个tag好比某种“照片”,并不是实实在在的东西,tags只可读,不可写。
-
在特殊或者需要特别注意的环境中,如:生产环境(production)、?(staging)、测试环境(testing)等等,只能从一个修复过的(fixed)tag中checkout和update,永远不要commit至一个tag。
-
对于上述提及到的环境,可以创建如下的tags:“production”,“staging”,“testing”等等。你也可以根据软件版本、项目的成熟程度来命名tag:“1.0.3”,“stable”,“latest”等等。
-
当trunk已经稳定,并且可以对外发布,也要相应地重新创建tags,然后再更新相关的环境(production, staging, etc)
——工作流样例
假设你必须添加了一个特性至一个项目,且这个项目是受版本控制的,你差不多需要完成如下几个步骤:
-
使用SVN checkout或者SVN switch从这个项目的trunk获得一个新的工作拷贝(branch)
-
使用SVN切换至新的branch
-
完成新特性的开发(当然,要做足够的测试,包括在开始编码前)
-
一旦这个特性完成并且稳定(已提交),并经过你的同事们确认,切换至trunk
-
合并你的分支至你的工作拷贝(trunk),并且解决一系列的冲突
-
重新检查合并后的代码
-
如果可能的话,麻烦你的同事对你所编写、更改的代码进行一次复查(review)
-
提交合并后的工作拷贝至trunk
-
如果某些部署需要特殊的环境(生成环境等等),请更新相关的tag至你刚刚提交到trunk的修订版本
-
使用SVN update部署至相关环境
-
SVN的trunk、branches、tags
2015-07-12 00:15:53我们在一些著名开源项目的版本库中,通常可以看到trunk, branches, tags等三个目录。由于SVN固有的特点,目录在SVN中并没有特别的意义,但是这三个目录却在大多数开源项目中存在,这是因为这三个目录反映了软件开发... -
SVN组成trunk,branches and tags
2015-02-11 16:42:35本文主要讲解一下SVN组成trunk,branches and tags,主要包括其概念的讲解、用法的比较,相信看完本文你肯定有不少收获,希望本文能教会你更多东西。在本篇文章中,我将会详细说明我是如何应用SVNtrunk(树干)、... -
SVN中trunk、branches、tags
2019-07-10 16:15:30一些阶段性的release版本,这些版本是可以继续进行开发和维护的,则放在branches目录中。又比如为不同用户客制化的版本,也可以放在分支中进行开发。 3、tags目录一般是只读的,这里存储阶段性的发布版本,只是作为... -
复习 SVN trunk, branches and tags
2013-07-02 22:50:57在本篇文章中, 我将会详细说明我是如何应用SVN trunk(树干)、branches(分支)和tags(标记)。这种方法同样被称为“branch always”,两者非常接近。可能我所介绍的并不是最好的方法,但是它会给新手一些解释说明,告诉... -
SVN trunk, branches and tags
2010-06-08 17:05:37翻译者:zwws 原 文: SVN trunk, branches and tags ... 转载请注明原链接 ,谢谢。 ...因水平所限,如果翻译得和原文... 在本篇文章中, 我将会详细说明我是如何应用SVN trunk(树干)、branches(分支)和tags(标记... -
svn目录结构trunk|branches|tags
2015-09-26 21:52:09我们在一些著名开源项目的版本库中,通常可以看到trunk, branches, tags等三个目录。由于SVN固有的特点,目录在SVN中并没有特别的意义,但是这三个目录却在大多数开源项目中存在,这是因为这三个目录反映了软件开发... -
SVN trunk, branches and tag
2010-04-21 17:25:02翻译者:zwws原 文: SVN trunk, branches and tags 译 言:... 在本篇文章中, 我将会详细说明我是如何应用SVN trunk(树干)、branches(分支)和tags(标记)。这种方法同样被... -
SVN 的标准目录结构:trunk, branches 和 tags
2010-07-01 16:22:00文章分类:Java编程 原文出处:http://techlife.blog.51cto.com/212583/223704<br /><br /> 我们在一些著名开源项目的版本库中,通常可以看到 trunk, branches, tags 等三个目录。由于 SVN 固有的特点... -
SVN的标准目录结构:trunk、branches、tags
2019-09-22 08:21:11我们在一些著名开源项目的版本库中,通常可以看到trunk, branches, tags等三个目录。由于SVN固有的特点,目录在SVN中并没有特别的意义,但是这三个目录却在大多数开源项目中存在,这是因为这三个目录反映了软件开发... -
SVN 中的trunk、branches、tags
2013-05-28 08:49:42一些阶段性的release版本,这些版本是可以继续进行开发和维护的,则放在branches目录中。又比如为不同用户客制化的版本,也可以放在分支中进行开发。 3.tags目录一般是只读的,这里存储阶段性的发布版本,只是... -
SVN的标准目录结构:trunk、branches、tags
2017-06-19 16:11:31我们在一些著名开源项目的版本库中,通常可以看到trunk, branches, tags等三个目录。由于SVN固有的特点,目录在SVN中并没有特别的意义,但是这三个目录却在大多数开源项目中存在,这是因为这三个目录反映了软件开发... -
SVN 中trunk、branches、tags
2016-08-25 10:43:14一些阶段性的release版本,这些版本是可以继续进行开发和维护的,则放在branches目录中。又比如为不同用户客制化的版本,也可以放在分支中进行开发。 3.tags目录一般是只读的,这里存储阶段性的发布版本,只是作为... -
SVN组成中trunk,branches and tags功能用法详解
2016-09-30 09:44:00SVN组成中trunk,branches and tags功能用法详解 我相信初学开发在SVN作为版本管理时,都估计没可能考虑到如何灵活的... 我将会详细说明我是如何应用SVNtrunk(树干)、branches(分支)和tags(标记)。这种...