SVN的trunk branch tag (二)

——简单的对比测试

  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:it

若是你须要修改你的应用程序,或者为它开发一个新的特性,请从trunk中建立一个新的branch,而后基于这个新的分支进行开发
除非是由于必须从一个branch中建立一个新的子branch,不然新的branch必须从trunk建立
当你建立了一个新branch,你应当当即切换过去。若是你没有这么作,那你为何要在最初的地方建立这个分支呢?
——Tagsio

  从表面上看,SVN branches和SVN tags没有什么差异,可是从概念上来讲,它们有许多差异。其实一个SVN tags就是上文所述的“为这棵树照张相”:一个trunk或者一个branch修订版的命名快照。table

  如下内容将告诉你如何使用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部署至相关环境