SVN trunk, branches and tags

PS:SVN trunk, branches and tags
据了解很多初学者在开发中将SVN作为版本管理时,可能没考虑到如何灵活的运用SVN来管理开发代码的版本,下面我就摘录一篇文章来详细说明SVN里的trunk(树干)、branches(分支)、tags(标记)这个三个文件目录的用法,给大家以启示!

  1. SVN的工作机制形象描述

    SVN的工作机制在某种程度上就像一颗正在生长的树:

    一颗有树干和许多分支的树
    分支从树干生长出来,并且细的分支从相对较粗的树干中长出
    一棵树可以只有树干没有分支(但是这种情况不会持续很久,随着树的成长,肯定会有分支啦,^^)
    一颗没有树干但是有很多分支的树看起来更像是地板上的一捆树枝
    如果树干患病了,最终分支也会受到影响,然后整棵树就会死亡
    如果分支患病了,你可以剪掉它,然后其他分支还会生长出来的哦!
    如果分支生长太快了,对于树干它可能会非常沉重,最后整棵树会垮塌掉
    当你感觉你的树、树干或者是分支看起来很漂亮的时候,你可以给它照张相,这样就就可以记得它在那时是多么的赞。

  2. Trunk

    Trunk是放置稳定代码的主要环境,就好像一个汽车工厂,负责将成品的汽车零件组装在一起。

    以下内容将告诉你如何使用SVN trunk:

    除非你必须处理一些容易且能迅速解决的BUG,或者你必须添加一些无关逻辑的文件(比如媒体文件:图像,视频,CSS等等),否则永远不要在trunk直接做开发
    不要因为特殊的需求而去对先前的版本做太大的改变,如何相关的情况都意味着需要建立一个branch(如下所述)
    不要提交一些可能破坏trunk的内容,例如从branch合并
    如果你在某些时候偶然间破坏了trunk,bring some cake the next day (”with great responsibilities come… huge cakes”)

  3. Branches

    一个branch就是从一个SVN仓库中的子树所作的一份普通拷贝。通常情况它的工作类似与UNIX系统上的符号链接,但是你一旦在一个SVN branch里修改了一些文件,并且这些被修改的文件从拷贝过来的源文件独立发展,就不能这么认为了。当一个branch完成了,并且认为它足够稳定的时候,它必须合并回它原来的拷贝的地方,也就是说:如果原来是从trunk中拷贝的,就应该回到trunk去,或者合并回它原来拷贝的父级branch。

    以下内容将告诉你如何使用SVN branches:

    如果你需要修改你的应用程序,或者为它开发一个新的特性,请从trunk中创建一个新的branch,然后基于这个新的分支进行开发
    除非是因为必须从一个branch中创建一个新的子branch,否则新的branch必须从trunk创建
    当你创建了一个新branch,你应当立即切换过去。如果你没有这么做,那你为什么要在最初的地方创建这个分支呢?

  4. 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)

  5. 工作流样例

    假设你必须添加了一个特性至一个项目,且这个项目是受版本控制的,你差不多需要完成如下几个步骤:
    使用SVNcheckout或者SVNswitch从这个项目的trunk获得一个新的工作拷贝(branch)
    使用SVN切换至新的branch
    完成新特性的开发(当然,要做足够的测试,包括在开始编码前)
    一旦这个特性完成并且稳定(已提交),并经过你的同事们确认,切换至trunk
    合并你的分支至你的工作拷贝(trunk),并且解决一系列的冲突
    重新检查合并后的代码
    如果可能的话,麻烦你的同事对你所编写、更改的代码进行一次复查(review)
    提交合并后的工作拷贝至trunk
    如果某些部署需要特殊的环境(生成环境等等),请更新相关的tag至你刚刚提交到trunk的修订版本,使用SVN update部署至相关环境

    1. 分散式分支开发模式原理

                      Svn://project/
                          +trunk/(主开发目录)
                          +branches/(分支开发目录)
                          +tags(存档目录,不允许修改)
                      
    2. 1.0开发,做dev1.0的branch

      此时的目录结构

                      svn://proj/
                           +trunk/ (不负担开发任务)
                           +branches/
                              +dev_1.0 (copy from trunk)
                           +tags/ (存档目录,不允许修改)
                      
    3. 1.0开发完成,merge dev1.0到trunk

      此时的目录结构

                      svn://proj/
                           +trunk/ (merge from branch dev_1.0) ===>测试,打tag或者修改合并后的bug,担负bug代码修改
                           +branches/
                              +dev_1.0 (开发任务结束,冻结)
                           +tags/
                      

      1) 合并后,测试如果有bug,可以直接在trunk上修改bug,直到修正后打tag进行发布
      2)合并后,测试无问题直接打tag发布

    4. 测试无问题直接打tag发布

      此时的目录结构

                      svn://proj/
                           +trunk/ (merge from branch dev_1.0)
                           +branches/
                              +dev_1.0 (开发任务结束,冻结)
                           +tags/
                              +tag_release_1.0 (copy from trunk)
                      
    5. 1.0版本结束,做下一个版本的开发2.0

      此时的目录结构

                      svn://proj/
                           +trunk/ (merge from branch dev_1.0)
                           +branches/
                              +dev_1.0 (开发任务结束,冻结)
                              +dev_2.0 (进行2.0开发)
                           +tags/
                              +tag_release_1.0 (copy from trunk)
                      
    6. 发现存在bug:需要修改,基于1.0的tag做branch_buffix_1.0

      此时的目录结构

                      svn://proj/
                           +trunk/
                           +branches/
                             +dev_1.0 (开发任务结束,冻结)
                             +dev_2.0 (进行2.0开发)
                             +branch_bugfix_1.0 (copy from tag/release_1.0)
                           +tags/
                              +tag_release_1.0 (copy from trunk)
                      

      1)如果2.0开发开始,但并没合并入主干:branch_bugfix_1.0中修正bug后合并到主干,通过主干打tag发布
      2)如果2.0开发结束,而且合并入主干:branch_bugfix_1.0中修正bug后依然合并到主干,但通过分支branch_buffix_1.0打tag发布

    7. 总结:

      1)tag上不做任务代码修改
      2)新需求开发,从主干(最新稳定的)做分支在分支上开发
      3)新需求分支开发完成或者分支bug修正后,都必须合并到主干
      4)主干可在合并后发现问题(并没打tag)做部分修改


参考:
1.SVN trunk, branches and tags
2.SVN组成中trunk,branches and tags功能用法详解

200-120
210-260
200-310
SY0-401
810-403
300-320
400-101
70-533
N10-006
MB2-707
210-060
400-201
350-018
ADM-201
CISSP
1Z0-060
400-051
300-075
MB2-704
100-101
9L0-012
642-999
300-115
MB5-705
70-461
1V0-601
300-206
352-001
70-486
300-135
NS0-157
PR000041
300-101
70-346
CCA-500
70-480
300-208
70-462
EX200
1Z0-803
EX300
ICBB
1Z0-808
AWS-SYSOPS
1Z0-434
300-070
CAS-002
220-801
SSCP
PMP
642-997
70-410
101-400
ITILFND
AX0-100
2V0-621
102-400
101
1Z0-067
220-802
70-463
C_TAW12_731
70-494
CISM
700-501
NSE4
NSE7
70-483
70-488
相关文章
  1. 对Web静态资源缓存自动更新的思考与实践的总结
  2. 单机多git帐号的访问详解案例
  3. CentOS 6.5安装部署SVN 1.8.13
  4. php-redis扩展
  5. Redis安装部署
  6. gearman应用-分布式图库系统设计
本站版权
1、本站所有主题由该文章作者发表,该文章作者与尘埃享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和尘埃的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:
二维码
Posted in Cache/File存储, Subversion
Comments are closed.