`
nier007
  • 浏览: 7612 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

svn代码版本管理

svn 
阅读更多
 在分支中做主要开发
1.0开发,做dev1.0的branch
此时的目录结构
svn://proj/
             +trunk/ (不负担开发任务)
             +branches/
                           +dev_1.0 (copy from trunk)
             +tags/ 
1.0开发完成,merge dev1.0到trunk
此时的目录结构
svn://proj/
             +trunk/ (merge from branch dev_1.0) ===>测试,打tag或者修改合并后的bug,担负bug代码修改
             +branches/
                           +dev_1.0 (开发任务结束,freeze)
             +tags/ 
1) 合并后,测试如果有bug,可以直接在trunk上修改bug,直到修正后打tag进行发布
2)合并后,测试无问题直接打tag发布
发布后发现存在bug:需要修改,基于1.0的tag做branch_buffix_1.0
此时的目录结构
svn://proj/
             +trunk/ 
             +branches/
                           +dev_1.0 (开发任务结束,freeze)
                           +dev_2.0 (进行2.0开发)
               +branch_buffix_1.0
             +tags/
                     +tag_release_1.0 (copy from trunk) 
    1)如果2.0开发开始,但并没合并入主干:branch_buffix_1.0中修正bug后合并到主干,通过主干打tag发布
    2)如果2.0开发结束,而且合并入主干:branch_buffix_1.0中修正bug后依然合并到主干,但通过分支branch_buffix_1.0打tag发布
依次类推!!

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

这是方法之一,比较适用于那些经常改动,bug较多的网站开发。

以下是收集出来的各方法说明:

SVN中Branch和tag建立的方法比较简单,totoiseSVN中的操作是:
1.选择Branch和tag..
2.在出来的界面中的ToURL中填上URL,一般是svn://IP/Project/branches/branch-1,这样就建立了一个 branch-1的branch.建立tag是一样的操作,只不过URL一般是svn://IP/Project/tags/tag-1
3.后面的Createcopyfrom是用于选择从你当前的workingbase中的哪个版本中建立Branch和tag,可以根据自己的选择来订 制,一般选择HeadRevision

建分支
svn copy svn://server/trunk svn://server/branches/ep -m "init ep"

>svn trunk,branch,tag
1. branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限上和一般的目录没有区别
3. 介绍一下
trunk:表示开发时版本存放的目录,即在开发阶段的代码都提交到该目录上。
branches:表示发布的版本存放的目录,即项目上线时发布的稳定版本存放在该目录中。
tags:表示标签存放的目录。
3.一般情况下,
tag,是用来做一个milestone的,不管是不是release,都是一个可用的版本。这里,应该是只读的。更多的是一个显示用的,给人一个可读(readable)的标记。
branch,是用来做并行开发的,这里的并行是指和trunk进行比较。 
比如,3.0开发完成,这个时候要做一个tag,tag_release_3_0,然后基于这个tag做release,比如安装程序等。trunk进入 3.1的开发,但是3.0发现了bug,那么就需要基于tag_release_3_0做一个branch,branch_bugfix_3_0,基于这个branch进行bugfix,等到bugfix结束,做一个tag,tag_release_3_0_1,然后,根据需要决定 branch_bugfix_3_0是否并入trunk。 

trunk :表示开发时版本存放的目录,即在开发阶段的代码都提交到该目录上。

branches :表示发布的版本存放的目录,即项目上线时发布的稳定版本存放在该目录中。

tags :表示标签存放的目录。 

转载  SVN的trunk branch tag 收藏

Subversion有一个很标准的目录结构,是这样的。
比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是

svn://proj/|+-trunk+-branches+-tags
这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改)。但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯。

对于这几个开发目录,一般的使用方法有两种。我更多的是从软件产品的角度出发(比如freebsd),因为互联网的开发模式是完全不一样的。
第一种方法,使用trunk作为主要的开发目录。
一般的,我们的所有的开发都是基于trunk进行开发,当一个版本/release开发告一段落(开发、测试、文档、制作安装程序、打包等)结束后,代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag。当下一个版本/阶段的开发任务开始,继续在trunk进行开发。
此时,如果发现了上一个已发行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(Developing Version)无法满足时间要求,这时候就需要在上一个版本上进行修改了。应该基于发行版对应的tag,做相应的分支(branch)进行开发。
例如,刚刚发布1.0,正在开发2.0,此时要在1.0的基础上进行bug修正。
按照时间的顺序

1.0开发完毕,代码冻结 
基于已经冻结的trunk,为release1.0打tag
此时的目录结构为
svn://proj/
             +trunk/ (freeze)
             +branches/
             +tags/
                     +tag_release_1.0 (copy from trunk) 
2.0开始开发,trunk此时为2.0的开发版 
发现1.0有bug,需要修改,基于1.0的tag做branch
此时的目录结构为
svn://proj/
             +trunk/ ( dev 2.0 )
             +branches/
                           +dev_1.0_bugfix (copy from tag/release_1.0)
             +tags/
                     +release_1.0 (copy from trunk) 
在1.0 bugfix branch进行1.0 bugfix开发,在trunk进行2.0开发 
在1.0 bugfix 完成之后,基于dev_1.0_bugfix的branch做release等 
根据需要选择性的把dev_1.0_bugfix这个分支merge回trunk(什么时候进行这步操作,要根据具体情况) 
这是一种很标准的开发模式,很多的公司都是采用这种模式进行开发的。trunk永远是开发的主要目录。

第二种方法,在每一个release的branch中进行各自的开发,trunk只做发布使用。
这种开发模式当中,trunk是不承担具体开发任务的,一个版本/阶段的开发任务在开始的时候,根据已经release的版本做新的开发分支,并且基于这个分支进行开发。还是举上面的例子,这里面的时序关系是。

1.0开发,做dev1.0的branch
此时的目录结构
svn://proj/
             +trunk/ (不担负开发任务 )
             +branches/
                           +dev_1.0 (copy from trunk)
             +tags/ 
1.0开发完成,merge dev1.0到trunk
此时的目录结构
svn://proj/
             +trunk/ (merge from branch dev_1.0)
             +branches/
                           +dev_1.0 (开发任务结束,freeze)
             +tags/ 
根据trunk做1.0的tag
此时的目录结构
svn://proj/
             +trunk/ (merge from branch dev_1.0)
             +branches/
                           +dev_1.0 (开发任务结束,freeze)
             +tags/
                     +tag_release_1.0 (copy from trunk) 
1.0开发,做dev2.0分支
此时的目录结构
svn://proj/
             +trunk/ 
             +branches/
                           +dev_1.0 (开发任务结束,freeze)
                           +dev_2.0 (进行2.0开发)
             +tags/
                     +tag_release_1.0 (copy from trunk) 
1.0有bug,直接在dev1.0的分支上修复



详细说明我是如何应用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部署至相关环境
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    SVN代码版本管理软件

    总的来说,SVN代码版本管理软件是软件开发过程中的得力工具,通过其强大的版本控制、安全认证和跨网络通讯能力,帮助团队实现高效、安全的代码管理。TortoiseSVN作为其流行的客户端,提供了直观的用户界面,使非技术...

    git 、svn 代码版本管理工具所有合集.7z

    总结来说,"git、svn 代码版本管理工具所有合集.7z" 包含了当前最主流的版本控制工具,无论是 Git 还是 SVN,都有相应的图形化客户端支持。Sourcetree 适用于 Git 用户,而 TortoiseSVN 和 TortoiseGit 则为 SVN 和 ...

    SVN版本管理规范

    SVN 版本管理规范 本文档旨在规范软件研发版本管理流程,降低软件开发过程的风险性。通过该规范的约束,降低软件开发过程的风险性。 版本管理流程图 集中式开发——基于 Trunk 的开发和分散式开发——基于 ...

    svn代码版本控制

    在这个“svn代码版本控制”资源中,包含了实现这一功能的完整工具包。 在进行软件开发时,SVN扮演着至关重要的角色。它允许开发者对项目中的每一个文件进行版本化管理,意味着每次修改都会被记录下来,形成一个历史...

    小乌龟svn代码管理

    通过以上介绍,我们可以看到小乌龟SVN作为一款强大的SVN客户端,为开发者提供了便捷的代码管理工具,使得版本控制变得更加简单和高效。熟练掌握其使用,可以极大地提升团队的开发效率和代码质量。

    SVN 代码管理 好用

    总之,SVN作为一款优秀的版本控制工具,对于代码管理和项目协作具有显著优势。正确地使用SVN,可以提高团队的生产力,降低错误风险,同时确保项目始终处于可控制状态。无论你是个人开发者还是大型团队,都应该考虑将...

    SVN 代码比较工具

    SVN(Subversion)是一种广泛使用的版本控制系统,用于管理和跟踪文件和目录的变更。在开发过程中,经常需要对比不同版本的代码,这时就需要借助代码比较工具。"SVN 代码比较工具"指的是能够与SVN集成,帮助开发者...

    前端代码版本管理机制1

    1. SVN代码版本管理 SVN是一种广泛使用的集中式版本控制系统,用于管理项目源代码。在前端项目中,使用SVN进行版本管理通常涉及以下目录结构: - **branches**:这是存放项目分支的地方。当开发团队需要进行新...

    SVN代码管理工具

    通过以上介绍,我们可以看到SVN作为代码管理工具的强大之处,它能够有效支持软件开发团队的协作和项目版本管理。无论你是新手还是经验丰富的开发者,掌握SVN都将对你的工作带来极大的便利。在提供的压缩包中,包含了...

    本地使用SVN进行源代码管理

    **Subversion**(简称SVN)是一种广泛使用的开源版本控制系统,主要用于软件开发过程中的源代码管理。相较于传统的版本控制工具如VSS(Visual SourceSafe),SVN提供了更强大的功能和更高的稳定性,能够有效地追踪...

    SVN代码管理器

    **SVN代码管理器** Subversion(简称SVN)是一种版本控制系统,用于跟踪文件和目录的变更,便于团队协作和项目管理。TortoiseSVN是基于SVN的一个图形化客户端,尤其以其与Windows资源管理器的无缝集成而受到开发者...

    SVN 代码管理插件

    这款"SVN 代码管理插件"可能是一个安装程序,具体是Slik-Subversion-1.9.7-x64.msi,这是一个64位版本的Subversion客户端,适用于Windows操作系统。 1. **版本控制**: SVN的核心功能是版本控制,它记录每一次对文件...

    删除svn代码管理器版本

    本文将深入探讨如何删除SVN代码管理器中的版本,以及在什么情况下可能会需要进行这样的操作。 首先,SVN是源代码版本控制系统,它允许开发人员追踪和控制对项目文件的修改。每个提交到SVN仓库的改动都会被记录下来...

    Svn版本管理与代码上线

    本教程将深入探讨Svn在版本管理和代码上线中的应用。 首先,让我们了解什么是Svn版本管理。Svn是一个分布式版本控制系统,它允许开发人员记录和追踪文件及目录的更改,并且可以方便地在不同版本之间进行切换。通过...

    获取svn最新版本号示例 以及svn常用命令

    首先,获取svn的最新版本号通常是为了确保你正在使用的代码是最新的,避免因版本过旧而遇到已解决的问题或错过新功能。有几种方法可以获取: 1. **通过svn命令行**:在命令行中,你可以输入`svn info URL`,这里的...

    svn代码管理器

    作为一个专业的IT大师,我很高兴向您详细介绍SVN代码管理器及其核心概念和操作。 1. **版本控制**:SVN的核心功能是版本控制,它记录了文件和目录的所有修改历史,使得团队成员可以随时回滚到之前的版本,避免因为...

    SVN代码管理工具.rar

    SVN(Subversion)是一种广泛使用的版本控制系统,用于管理和跟踪软件开发中的源代码更改。它允许团队成员协作工作,同时保持代码的...无论你是初学者还是经验丰富的开发者,都能从中受益,提升代码管理的效率和质量。

Global site tag (gtag.js) - Google Analytics