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的分支上修复
分享到:
相关推荐
拉分支(或称创建分支)是将主干(trunk)上的代码复制到一个新的分支(branch)中。在 SVN 中,分支是主干的一个独立副本,允许开发人员在不影响主线的情况下进行实验性更改。当在主干上创建 `new_trunk_main.txt` ...
这两种方式都可以用来保存项目的特定状态,但它们之间有一些细微的区别: - **标签(tag)**:通常用于标记一个特定的版本,如产品发布版。标签一旦创建就很少被修改,因此它更适用于需要长期保持不变的历史版本。 ...
SVN(Subversion)是一种广泛使用的版本控制系统,用于管理软件项目的源代码和其他文件。它允许开发者在项目开发过程中创建分支和合并代码,以支持并行开发、错误修复和功能添加。分支是SVN中的一个重要概念,它允许...
其中,分支(Branch)和合并(Merge)是两个非常重要的概念。本文将对SVN分支的合并和同步策略进行详细的介绍。 什么是分支? ---------------- 根据Subversion的说法,一个分支是某个development line(通常是...
- 在弹出的对话框中,您可以选择两种方式来设置分支的URL: - **手动设置**:直接输入分支的SVN URL地址。 - **浏览资源库**:这是一种更为推荐的方法。通过点击“浏览资源库”按钮,可以在弹出的对话框中选择您...
Subversion(简称svn)是一种广泛使用的版本控制系统,它提供了分支和标记的功能,使得复杂的开发流程得以顺利进行。下面将详细阐述svn的版本管理,以及如何创建分支和标记。 首先,svn的版本管理主要通过版本库...
本文将详细讲解两种常用的版本控制系统——Subversion(svn)和Git——的基本操作。 ### 1. Subversion (svn) 管理 #### 1.1 创建版本库 在svn中,创建版本库通常通过`svnadmin create`命令实现。例如: ``` ...
SVN(Subversion)是一种广泛使用的版本控制系统,用于管理软件项目的源代码和其他文件。它允许团队成员协同工作,跟踪每个更改,并在需要时恢复到以前的版本。以下是一些svn的常用命令,这些命令在日常开发和项目...
在讨论具体的合并策略之前,我们先了解两种基本的合并方式: 1. **覆盖合并**:简单地用一个版本覆盖另一个版本,适用于不需要保留历史修改的情况。 2. **选择性合并**:保留双方的修改,手动或自动解决冲突,适用...
集中式开发——基于 Trunk 的开发和分散式开发——基于 Branches 的开发是两种常见的版本管理流程图。集中式开发方式简单,但代码对于多个不同的项目,不同的需求只有一份代码,正在修改中的代码不能很好地响应紧急...
**SVN分支管理详解** **1. 创建分支** 在Subversion(SVN)中,创建分支是项目开发中常见的操作,允许开发人员在不影响主分支(通常为trunk)的情况下进行独立开发。创建分支可以通过图形界面工具或者命令行进行。...
在描述中,"点branch/tag, to path里把1改成2,及拷贝一个2分支"意味着从主分支(通常称为trunk)创建了一个新的分支,例如从`/path/to/branch1`复制到`/path/to/branch2`。这可以通过执行`svn copy`命令完成,将...
SVN(Subversion)是一种广泛使用的版本控制系统,用于管理和跟踪文件和目录的变更。它允许多人协同工作,记录每次修改,以便团队成员可以共享代码、文档等资源,并且能够回滚到任何历史版本。SVN的核心概念包括仓库...
在IT行业中,版本控制系统是开发团队协作的重要工具,其中Subversion(简称SVN)是一种广泛使用的集中式版本控制系统。本文将深入探讨“svn link”方式的安装与使用,以及如何利用资源包进行配置。 首先,我们需要...
5. **分支(Branch)**:在SVN中,分支允许你从主干(Trunk)创建一个独立的开发线,这样可以进行风险较高的开发而不会影响主线。 6. **合并(Merge)**:分支完成后,你需要将分支上的更改合并回主干,以便所有...
1. 团队协作:SVN 提供了一种有效的协作方式,让开发者可以共享代码、追踪修改并解决冲突。 2. 版本控制:通过记录每次更改,SVN 可以轻松回溯到任何历史版本,便于问题排查和恢复。 3. 代码审查:提交前的代码...
SVN(Subversion)是一种广泛使用的版本控制系统,用于管理软件项目的源代码和其他文件的历史变更。SVN中文帮助手册是为方便中国用户理解和使用SVN而编写的文档,它提供了全面的指南、教程以及命令参考,旨在帮助...