在本篇文章中, 我将会详细说明我是如何应用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部署至相关环境

转载于:https://www.cnblogs.com/dongblog/p/4013329.html

svn代码版本管理总结相关推荐

  1. 坚果云+svn实现异地非局域网个人代码版本管理

    原理大概是A地的设备作为服务端创建仓库,将仓库传上坚果云,同步到B地,再拉取仓库的代码 因为我的实验室是Mac,宿舍是win,目的是将实验室的代码拉回宿舍,所以以Mac创建仓库,win拉取仓库.因为是 ...

  2. SVN集中代码版本管理仓库

    SVN介绍 Svn(subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统.Svn版本管理工具管理着随时间改变的各种数据.这些数据放置 ...

  3. svn(subversion)代码版本管理在linux下的一些常见使用命令

    以下的操作都是默认你的服务器安装有svn的大前提下进行的. 一.创建版本库 我的版本库存放路径为: /var/svn : 下面我们来创建一个名为 svntet 的版本库    注释: svnadmin ...

  4. git-svn:通过git来管理svn代码

    简介 svn和git都是常用的版本管理软件,但是git无论在理念或是功能上都比svn更为先进.但是有的公司是以svn作为中央仓库,这时git与svn代码的同步就可以通过 git-svn这个软件进行,从 ...

  5. Git学习总结(17)——大型分布式团队的代码版本管理

    从开始工作到现在,我经历过没有代码版本管理.代码集中式管理,以及现在的分布式管理,我深刻体会到它在软件开发过程中的重要性: 我在工作中遇到的很多客户都存在对于代码版本管理的各种问题.困惑和不同的需求. ...

  6. 推荐免费的svn空间(SVN代码托管)

    原文:http://www.cnblogs.com/ggjucheng/p/3497575.html 最近研究了国内和国外的免费svn空间,SVN代码托管,SVN在线,代码托管中心,有所心得. 1.h ...

  7. Git代码版本管理命令和团队协作规范---实践版

    Git代码版本管理流程和团队协作规范 Git版本管理介绍 git各分支功能介绍 master 分支 develop 分支 feature 分支 release 分支 hotfix 分支 使用规范 ** ...

  8. 使用Git进行代码版本管理

    文章目录 前言 一.Git的优势 二.使用Git管理代码版本 1.设置用户名及邮箱 2.创建版本库 2.1 创建库 2.2 添加文件到版本库 3.查看库状态 3.1 修改的文件 3.2 查看修改内容 ...

  9. GitFlow 代码版本管理

    GitFlow 代码版本管理 Git的优点   现在大多数公司的研发团队都在Git作为代码管理工具,使用CVS.SVN等已经很少.至于为什么选用git,参考<Git.CVS.SVN比较>. ...

最新文章

  1. MATLAB-1:入门基础
  2. mysql 文件放网络盘_MySQL InnoDB的磁盘文件及落盘机制
  3. 生产Java应用程序中的十大异常类型-基于1B事件
  4. java传.net datetime_.net调java写的webService传过去的datetime,int等非string类型为null的问题...
  5. c# 可变二维数组_C#| 具有固定行大小和可变列大小的二维数组
  6. 蚂蚁(51Nod-1266)
  7. 汇编语言王爽 实验十五
  8. 高通WCNSS驱动简析
  9. Xshell 4使用
  10. 车辆工程计算机发展前景,车辆工程专业就业方向有哪些 就业前景怎么样
  11. Directshow 采集-截屏和显示
  12. ubuntu16.04.3下安装NVIDIAgtx1060显卡驱动记录
  13. 来了,来了,他来了,使用Github制作自己的在线简历(网页和PDF版)你都值得拥有
  14. Linux桌面对应的路径
  15. Arduino 浊度传感器 TS300B 的使用
  16. 计算二叉树的深度和叶子结点数(递归算法实现)
  17. 小米路由器获得BSI物联网安全风筝标志认证;IDC最新数据显示浪潮分布式存储增速中国第一 | 全球TMT...
  18. 投资30亿美元 IBM启动云计算大数据芯片研究计划
  19. 浏览器内核及其兼容的简单说明
  20. jQuery ajax bootstrap layui

热门文章

  1. 《MySQL必知必会》笔记--数据库基础
  2. 【软工项目组】第九次会议
  3. 阿里云CentOS服务器挂载数据盘
  4. 【iOS开发每日小笔记(二)】gitHub上的开源“瀑布流”使用心得
  5. 地质灾害防治条例释义的摘要
  6. 判断iframe是否加载完成的方法[转]
  7. 如何将函数的实际参数转换成数组
  8. vue router-link 添加点击事件
  9. Vue介绍-Vue简单应用-Vue基本用法
  10. 超级好用 将html字符串,转化为纯文本