精华内容
下载资源
问答
  • 敏捷的时代,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为整棵树 trunk用于主线开发 ...在branches开发时,要时常从trunk中更新到branches中,用于同步 当branches开发完成时,就...
    • 我们可以将这三者想象成一棵树的组成部分
    1. trunk为树干
    2. branches为树枝
    3. tags为整棵树
    • trunk用于主线开发

    • branches用于定制版本、修复bugs、并行开发等使用

    • tags用于存放release版本,阶段性代码,不用于修改和commit

    • 在branches开发时,要时常从trunk中更新到branches中,用于同步

    • 当branches开发完成时,就可以将branches重新merge到trunk中

    展开全文
  • SVN分支合并(trunkbranches、tags)

    千次阅读 2016-10-18 23:28:10
    尽管svn没有作强制要求,但是一般svn版本库目录建议创建trunkbranches和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)

    ——工作流样例

      假设你必须添加了一个特性至一个项目,且这个项目是受版本控制的,你差不多需要完成如下几个步骤:

    1. 使用SVN checkout或者SVN switch从这个项目的trunk获得一个新的工作拷贝(branch)
    2. 使用SVN切换至新的branch
    3. 完成新特性的开发(当然,要做足够的测试,包括在开始编码前)
    4. 一旦这个特性完成并且稳定(已提交),并经过你的同事们确认,切换至trunk
    5. 合并你的分支至你的工作拷贝(trunk),并且解决一系列的冲突
    6. 重新检查合并后的代码
    7. 如果可能的话,麻烦你的同事对你所编写、更改的代码进行一次复查(review)
    8. 提交合并后的工作拷贝至trunk
    9. 如果某些部署需要特殊的环境(生成环境等等),请更新相关的tag至你刚刚提交到trunk的修订版本
    10. 使用SVN update部署至相关环境
    展开全文
  • 我们在一些著名开源项目的版本库中,通常可以看到trunk, branches, tags等三个目录。由于SVN固有的特点,目录在SVN中并没有特别的意义,但是这三个目录却在大多数开源项目中存在,这是因为这三个目录反映了软件开发...
  • 本文主要讲解一下SVN组成trunk,branches and tags,主要包括其概念的讲解、用法的比较,相信看完本文你肯定有不少收获,希望本文能教会你更多东西。在本篇文章中,我将会详细说明我是如何应用SVNtrunk(树干)、...
  • SVN中trunkbranches、tags

    热门讨论 2019-07-10 16:15:30
    一些阶段性的release版本,这些版本是可以继续进行开发维护的,则放在branches目录中。又比如为不同用户客制化的版本,也可以放在分支中进行开发。 3、tags目录一般是只读的,这里存储阶段性的发布版本,只是作为...
  • 在本篇文章中, 我将会详细说明我是如何应用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(标记...
  • 我们在一些著名开源项目的版本库中,通常可以看到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(标记)。这种方法同样被...
  • 文章分类:Java编程  原文出处:http://techlife.blog.51cto.com/212583/223704<br /><br /> 我们在一些著名开源项目的版本库中,通常可以看到 trunk, branches, tags 等三个目录。由于 SVN 固有的特点...
  • 我们在一些著名开源项目的版本库中,通常可以看到trunk, branches, tags等三个目录。由于SVN固有的特点,目录在SVN中并没有特别的意义,但是这三个目录却在大多数开源项目中存在,这是因为这三个目录反映了软件开发...
  • 一些阶段性的release版本,这些版本是可以继续进行开发维护的,则放在branches目录中。又比如为不同用户客制化的版本,也可以放在分支中进行开发。 3.tags目录一般是只读的,这里存储阶段性的发布版本,只是...
  • 我们在一些著名开源项目的版本库中,通常可以看到trunk, branches, tags等三个目录。由于SVN固有的特点,目录在SVN中并没有特别的意义,但是这三个目录却在大多数开源项目中存在,这是因为这三个目录反映了软件开发...
  • 一些阶段性的release版本,这些版本是可以继续进行开发维护的,则放在branches目录中。又比如为不同用户客制化的版本,也可以放在分支中进行开发。 3.tags目录一般是只读的,这里存储阶段性的发布版本,只是作为...
  • SVN组成中trunk,branches and tags功能用法详解  我相信初学开发在SVN作为版本管理时,都估计没可能考虑到如何灵活的... 我将会详细说明我是如何应用SVNtrunk(树干)、branches(分支)tags(标记)。这种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 390
精华内容 156
关键字:

trunk和branches