一、SVN概述
1.SVN介绍
SVN是Subversion的简称,是一个自由开源的版本控制系统。
Subversion将文件存放在中心版本库里,这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况,这样就可以借此将数据恢复到以前的版本,并可以查看数据的更改细节
2.SVN基本概念
问题:怎样让系统允许用户共享信息,而不会让他们因意外而互相干扰?
复制-修改-合并方案(Subversion默认的模式)
在这种模型里,每一个客户读取项目配置库建立一个私有工作副本——版本库中文件和目录的本地映射。
用户并行工作,修改各自的工作副本,最终,各个私有的复制合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。
3.SVN架构
Subversion支持Linux和Windows,更多是安装在Linux下。
源代码版的解压就能用
二进制文件版解压后要安装
svn服务器有2种运行方式:
一.独立服务器版本(源代码版的解压就能用)
二.借助apache运行版本(二进制文件版解压后要安装,安装文件,根据不同的系统选择)。
两种方式各有利弊?
svn存储版本数据也有2种方式:
BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点(基于文件系统)。
二..使用篇(重点)
SVN :是一种集中式管理代码的版本控制系统,原理就是把代码都保存到一个固定的位置(仓库),每次从这个位置拷贝更新代码,进行编辑;再把修改后的代码提交到该目录中。
SVN是基于客户端和服务端(实际开发更多安装是在linux下)的方案::
多人协作开发也是如此。因此需要一个服务器用于保存和管理库文件(要保存的代码等文件)的服务端——VisualSVN Server。实际开发服务端更多是安装在Linux下。
还需要一个用户的操作端,用于提交更新检出代码,
常用的有Eclipse的Svn插件,以及TortoiseSVN(小乌龟)。
SubVersion官网:http://subversion.apache.org/
一.服务器端-VisualSVN安装与配置
1,VisualSVN安装与创建仓库
在开始运行中录入services.msc
这个服务要开启
在开始运行中查找visualSVN Server Manager就可以打开图形化管理界面
二,VisualSVN创建工程目录
可以创建很多的仓库,实际开发中一个仓库对应着一个项目
可以在repository右击选中properties(特性),给用户授权.
三..VisualSVN权限控制
创建用户和用户组
创建组
创建一个组,将开发人员分组,可以批量的为成员授权.
分配权限
可以在repositories右击选中properties(特性),给用户授权
在给用户修改权限的时候,先移出,在添加
二.客户端-TortoiseSVN安装与使用(重要)
它是一个基于windows系统的svn图形化界面.
1.TortoiseSVN下载
2.TortoiseSVN安装
安装后需要重启电脑.
3.Tortoise SVN常用操作
浏览仓库
正常情况下,在浏览仓库时会要求录入username与password
我们可以清空svn客户端的缓存
Checkout
检出svn服务器上的项目
注意:检出后会有一个.svn隐藏目录
Add:添加到svn服务器管理
在检出(checkout)的项目文件夹里面创建文件
这样图标的文件代表它没有由svn管理
Add只是加到了SVN管理 ,这个代表的是它要添加到svn服务器
Commit:提交到了仓库中
Update
Update,它是更新操作,可以将svn服务器上的内容更新到本地
更新到历史版本
在实际的开发中,一般开发人员在写完代码的时候,自己测试可以通过,还要项目经理审核才能commet,
更新到历史版本一般是很少使用的
查看当前日志
通过日志信息,右击哪一个版本
也可以通过下面的方式来更新历史版本
Delete(标记删除) 用的不多
标记删除操作,本地文件会删除,我们需要在它的父目录(项目的仓库)进行提交,才能真正从服务器删除
在重构的时候,删除一些无用的类和文件,会用到
导入导出(了解)
Import将本地资源导入到svn服务器
Export导出项目,和checkout的区别,它不存在.svn隐藏文件
三..客户端-Eclipse SVN插件安装与使用(次重要)
1.下载与安装SVN插件
在我们资料中有一个svn插件,交它直接复制到eclipse安装目录下的dropins中
我们怎样可以知道svn插件安装成功
2.Eclipse SVN插件使用
浏览仓库,将eclipse工程导入到svn服务器
在svn资源库研究
怎样将eclipse中的工程导入到svn仓库,可以在工程上右键
完成后,它其实没有真正的导入,需要我们在进行提交才真正导入到svn仓库
Checkout , 导出 , 导入
Add commit update更新到历史版本
Eclipse的svn插件解决冲突
产生了冲突
我们在工程上执行更新操作,就可以查看到冲突的文件
解决冲突
三 ..冲突问题与解决(重要)
多个用户同时操作同一个文件时,就可能产生冲突情况。
这个冲突产生后如何解决,我们可以采用手动Merge,解决冲突后,重新commit.
HelloWorld.java它是服务器上的文件与本地文件合并
HelloWorld.java.mine本地修改后的文件
HelloWorld.java.r4修改前的文件
HelloWorld.java.r5对方修改后的文件
进入后,选中代码右击,选择操作,并且点击合并后的代码也能修改 ,修改完成后save ,标记为解决
注意:
在添加后只是在本地,需要提交到服务端才是真正的导入了svn仓库.
五.扩展篇
1.svn目录规范
在visualSVN中创建仓库时,可以选择svn目录结构进行创建
Trunk主干目录,此目录下的文件为基准文件
Branches用于开发的分支目录
Tags用于发布的版本目录
假设有一个项目OA,我们完成了1.0版本,这时就可以打一个tags
后续我们在OA项目上添加一个新的模块(及时通讯),我们就可以开一个分支,又有一个公司需要在我们OA基础上添加财务管理模块,我们又可以打一个分支。我们后续针对OA的1.0版本在升级,我们不需要原来附加功能,就可以在原来的主干上继续开发,形成OA2.0版本,开发完成后就可以在打一个tags
2.打一个分支或标记
分支的定义规则:
Project name+日期时间+功能点
Tags的定义规则
Project name+版本号
版本号定义为三段数字编号
xxx.xxx.xxx
第一个:革命性的产品升级版
第二个:新功能版
第三个:修正bug
切换主干,分支与标记
Tags一般是只读,它代表的是发布的版本,所以我们不要进行改变。
[if !supportLists]1. [endif]主干与分支的合并
如果要将主干内容合并到分支上,我们需要在分支的工作副本上操作。
如果要将分支的改变合并到主干上,我们需要在主干的工作副本上操作。
我们的需要是将分支的改变合并到主干上:
注意:在合并时要选择在相应的版本号,合并后,可能会出现冲突,将冲突解决,commit就可以。