——简单的对照

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

  • 一颗有树干和很多分支的树
  • 分支从树干生长出来。而且细的分支从相对较粗的树干中长出
  • 一棵树能够仅仅有树干没有分支(可是这样的情况不会持续非常久。随着树的成长,肯定会有分支啦。^^)
  • 一颗没有树干可是有非常多分支的树看起来更像是地板上的一捆树枝
  • 假设树干患病了,终于分支也会受到影响,然后整棵树就会死亡
  • 假设分支患病了。你能够剪掉它,然后其它分支还会生长出来的哦!

  • 假设分支生长太快了,对于树干它可能会非常沉重,最后整棵树会垮塌掉
  • 当你感觉你的树、树干或者是分支看起来非常美丽的时候,你能够给它照张相。这样就就能够记得它在那时是多么的赞。

——Trunk

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

  下面内容将告诉你怎样使用SVN trunk:

  • 除非你必须处理一些easy且能迅速解决的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部署至相关环境

SVN之 trunk, branches and tags意义的更多相关文章

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

    SVN组成中trunk,branches and tags功能用法详解  我相信初学开发在SVN作为版本管理时,都估计没可能考虑到如何灵活的运用SVN来管理开发代码的版本,下面我就摘录一篇文章来简单说 ...

  2. SVN中trunk,branches,tags用法详解

    原文地址:http://www.cnblogs.com/dafozhang/archive/2012/06/28/2567769.html Subversion有一个很标准的目录结构,是这样的.比如项 ...

  3. SVN中trunk,branches,tags用法详解(转载)

    转载出处:http://www.cnblogs.com/dafozhang/archive/2012/06/28/2567769.html Subversion是一个自由开源的版本控制系统.在Subv ...

  4. SVN中trunk,branches,tags用法详解【转】

    Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-ta ...

  5. SVN中trunk,branches,tags用法详解[重要]

    Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-ta ...

  6. SVN中trunk,branches,tags的使用明细--项目代码的管理

    SVN在项目开发过程中有两种模式: 第一种:Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局svn://proj/|+ ...

  7. SVN 中trunk、branches、tags

    SVN 中trunk.branches.tags   我们在一些著名开源项目的版本库中,通常可以看到trunk, branches, tags等三个目录.由于SVN固有的特点,目录在SVN中并没有特别 ...

  8. SVN中trunk、branches、tags用法详解

    Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/. 那么标准的svn布局是:svn://proj/|+-trunk+-branches+-t ...

  9. SVN标准开发布局目录,trunk,branches,tags用法详解

    http://www.cnblogs.com/newstar/archive/2011/01/04/svn.html 关于 SVN 目录结构       Subversion有一个很标准的目录结构,是 ...

随机推荐

  1. JSz中的静态方法和实例方法的分析

    我又回来了,最近忙着喝枸杞,没来写博客感觉很有负罪感,今晚我来写一点小小的知识点 可能我们在用形如Array.of()的方法时会产生一些疑问,为什么我们能不实例化直接使用Array上的of()方法呢, ...

  2. HTML 代码复用实践

    前言 通常我们所做的一些页面,我们可以从设计图里面看出有一些地方是相同的.例如:头部,底部,侧边栏等等.如果是制作静态页面的同学,对于这些重复的部分只能够通过复制粘贴到新的页面来,如果页面的数量上去了 ...

  3. Nginx的日志剖析

    1.访问日志(access.log) Nginx的访问日志就是一个文件,它存储着每个用户对网站的访问请求,这个功能是有ngx_http_log_module模块来负责的,这个文件存在的主要目的就是为了 ...

  4. Linux CentOS下Python+robot framework环境搭建

    Linux CentOS下Python+robot framework环境搭建   by:授客 QQ:1033553122 操作系统环境:CentOS 6.5-x86_64 下载地址:http://w ...

  5. Cookie、Session 和 Token区别

    1 Cookie.Session 和 Token 都是用来做持久化处理的,目的就是让客户端和服务端相互认识.Http 请求默认是不持久的没有状态的,谁也不认识谁.   2 Cookie: 是存放在客户 ...

  6. Android手机上,利用bat脚本模拟用户操作

    ………… 那么你就可以来看看这篇帖子了. 言归正传 利用bat脚本模拟用户操作,需要用到两点: ①就是adb命令了,adb命令可以用来模拟用户在手机上的操作 ②bat语言,就是批处理语言,主要用来进行 ...

  7. [Android] TableLayout

    public class TableLayout extends LinearLayout 查过文档,整理下要点: 一个 TableLayout 包含一些 TableRow 对象,每个对象代表一行.除 ...

  8. memcached 查看所有的key

    1. cmd上登录memcache   1 > telnet 127.0.0.1 11211 2. 列出所有keys   1 2 3 4 stats items // 这条是命令 STAT it ...

  9. leveldb源码分析--SSTable之TableBuilder

    上一篇文章讲述了SSTable的格式以后,本文结合源码解析SSTable是如何生成的. void TableBuilder::Add(const Slice& key, const Slice ...

  10. HBase的写事务,MVCC及新的写线程模型

    MVCC是实现高性能数据库的关键技术,主要为了读不影响写.几乎所有数据库系统都用这技术,比如Spanner,看这里.Percolator,看这里.当然还有mysql.本文说HBase的MVCC和0.9 ...