SVN是Subversion的简称,是一种集中式的版本控制系统。
集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。
1 SVN工作流程
开始上班:客户端连接到SVN服务器 → 从SVN服务器上下载项目组最新代码,并进入到自己的分支
进行工作:编写代码,每天隔一个小时向服务器自己的分支提交一次代码
快下班了:把自己的分支合并到SVN服务器的主分支上,一天的工作就完成了,并反映给SVN服务器
2 服务器配置
&MAC默认安装了SVN环境,只需要进行配置即可使用了。
- 创建代码库
|
|
创建完成后,会自动生成相关的配置文件和数据库文件等。
配置用户权限
主要修改conf目录下的三个配置文件
- svnserve.conf
|
|
- passwd
|
|
- authz
|
|
- 启动/关闭SVN服务器
|
|
3 客户端配置
人物角色: 项目经理 henry、程序员 cathy、新员工 roger
3.1 初始化导入
|
|
3.2 同步远端代码到本地
|
|
3.3 提交更新
|
|
3.4 更新服务器代码到本地
|
|
4 SVN目录结构
有一个很标准的目录结构,是这样的。比如项目是 proj,svn 地址为 svn://proj/,那么标准的 svn 布局是:
|
|
这是一个标准的布局,trunk 为主开发目录,branches 为分支开发目录,tags为tag 存档目录(不允许修改)。但是具体这几个目录应该如何使 用,svn 并没有明确的规范,更多的还是用户自己的习惯。
对于这几个开发目录,一般的使用方法有两种:
4.1 trunk作为主开发目录的用法
所有的开 发都是基于 trunk 进行开发,当一个版本 / release 开发告一段落(开发、测试、文档、制作安装程序、打包等)结束后,代码 处于冻结状态(人为规定,可以通过 hook 来进行管理)。此时应该基于当前冻结的代码库,打 tag。当下一个版本 / 阶段的开发任务开始,继续在 trunk 进行开发。此时,如果发现了上一个已发行版本(Released Version)有一些 bug,或者一些很急迫的功能要求,而正在开发的版本(Developing Version)无法满足时间要求,这时候就需要在上一个版本上进行修改了。应该基于发行版对应的 tag,做相应的分支(branch)进行开发。例 如,刚刚发布 1.0,正在开发 2.0,此时要在 1.0 的基础上进行 bug 修正。
4.2 trunk作为发布版本目录的用法
在每一个 release 的 branch 中进行 各自的开发,trunk 只做发布使用。这种开发模式当中,trunk 是不承担具体开发任务的,一个版本 / 阶段的开发任务在开始的时候,根据已经 release 的版本做新的开发分支,并且基于这个分支进行开发。
4.3 两种开发模式比较
第一种开发模式(trunk 进行主要开发,集中式):
- 优点:
管理简单 - 缺点:
当开发的模块比较多,开发人数 / 小团队比较多 的时候,很容易产生冲突而影响对方的开发。因为所有的改动都有可能触碰对方的改动
- 优点:
第二重开发模式(分支进行主要开发,分散式):
- 优点:
各自开发独立,不容易相互影响。 - 缺点:
管理复杂,merge 的时候很麻烦,容易死人。
- 优点:
5 附录
5.1 SVN常用命令
|
|
5.2 SVN文件状态标识
|
|