共计 2333 个字符,预计需要花费 6 分钟才能阅读完成。
Subversion 有一个很标准的目录结构,是这样的。
比如项目是 proj,svn 地址为 svn://proj/,那么标准的 svn 布局是
svn://proj/|+-trunk+-branches+-tags
这是一个标准的布局,trunk 为主开发目录,branches 为分支开发目录,tags 为 tag 存档目录(不允许修改)。但是具体这几个目录应该如何使用,svn 并没有明确的规范,更多的还是用户自己的习惯。
对于这几个开发目录,一般的使用方法有两种。我更多的是从软件产品的角度出发(比如 freebsd),因为互联网的开发模式是完全不一样的。1. 第一种方法,使用 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 永远是开发的主要目录。
多个人在 Trunk 同一条道路上开发,到达一个里程碑后归档到 Tag 上,Trunk 的开发继续进行,如果有问题再从 Tag 上建立分支 Branch 进行基于某个 Tag 的版本开发。
2. 第二种方法,在每一个 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 的分支上修复
推荐阅读:
Linux 中 Subversion 配置实例 http://www.linuxidc.com/Linux/2012-02/53109.htm
CentOS 6.2 SVN 搭建 (YUM 安装) http://www.linuxidc.com/Linux/2013-10/91903.htm
Apache+SVN 搭建 SVN 服务器 http://www.linuxidc.com/Linux/2013-03/81379.htm
Windows 下 SVN 服务器搭建和使用 + 客户端重新设置密码 http://www.linuxidc.com/Linux/2013-05/85189p5.htm
Ubuntu Server 12.04 安装 SVN 并迁移 Virtual SVN 数据 http://www.linuxidc.com/Linux/2013-05/84695.htm
Ubuntu Server 搭建 svn 服务以及迁移方法 http://www.linuxidc.com/Linux/2013-05/84693.htm
借助网盘搭建 SVN 服务器 http://www.linuxidc.com/Linux/2013-10/91271.htm