1.Why?满足协同开发过程中版本控制要求。
2.What?
①Subversion,简称SVN
②版本控制工具。
CVS→SVN→GIT
传统开发:OA、PDM、ERP、CRM……
互联网开发:淘宝、京东、美团、微信、12306、FaceBook、YouTube、Twitter……
3.三个基本操作
①检出:checkout
②更新:update
③提交:commit
4.服务器端安装配置
①安装服务器端程序
运行:Setup-Subversion-1.8.9-1.msi
验证:在命令行中执行svn --version
C:\Windows\System32>svn --version
svn,版本 1.8.9 (r1591380)
编译于 May 8 2014,13:53:01 在 x86-microsoft-windows
Copyright (C) 2014 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/
可使用以下的版本库访问模块:
* ra_svn : 使用 svn 网络协议访问版本库的模块。 - 使用 Cyrus SASL 认证
- 处理“svn”方案
* ra_local : 访问本地磁盘的版本库模块。
- 处理“file”方案
* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
- using serf 1.3.5
- 处理“http”方案
- 处理“https”方案
②创建并配置版本库
[1]在硬盘上创建一个目录
D:\RepSVN\CRM |
[2]在命令行执行下面命令
svnadmin create D:\RepSVN\CRM
[3]效果
③启动服务器端程序
[1]命令行方式
svnserve -d -r D:\RepSVN\CRM
验证:检查3690端口是否被占用
netstat -an |
TCP 0.0.0.0:3690 0.0.0.0:0 LISTENING |
缺陷:窗口关闭后,服务器程序也停止
[2]单仓库和多仓库
(1)单:在启动服务器指定版本库位置时,固定使用一个单一的仓库
svnserve -d -r D:\RepSVN\CRM |
(2)多:在启动服务器指定版本库位置时,不指定任何一个具体的仓库位置
svnserve -d -r D:\RepSVN
在通过客户端访问服务器时再灵活的指定某个具体的仓库
[3]注册为Windows服务
(1)需要用到一个Windows内置的程序:C:\Windows\System32\sc.exe
(2)外层:sc create 服务名 binpath= "内部命令" start= auto depend= Tcpip
*要求:“=”左边必须没有空格,右边必须有一个空格
(3)内部:svnserve.exe文件路径 --service -r D:\RepSVN
sc create SVNService binpath= "D:\DevInstall\SubversionInstall\bin\svnserve.exe --service -r D:\RepSVN" start= auto depend= Tcpip
[4]sc相关命令
停止某个服务:sc stop 服务名
删除某个服务:sc delete 服务名
④在命令行中进行简单的操作测试
[1]检出命令
[2]执行检出命令后,检出目录下会自动创建.svn隐藏目录。包含.svn的那个目录称为工作副本。
为了保证工作副本能够正常和服务器端进行交互,.svn目录中的内容不要删除或修改。
[3]执行提交命令,要切换到工作副本目录中
-
要提交一个文件,必须这个文件以及纳入版本控制体系
-
执行svn add命令将文件加入版本控制体系
D:\WorkSpaceHarry>svn add Hello.txt
A Hello.txt
每次执行提交操作都必须附加日志信息
svn commit -m "My First commit" Hello.txt
必须具备对版本库中的特定目录具备写权限才能够执行提交操作
i.找到对应版本库的conf目录
ii.找到svnserve.conf文件
iii.释放anon-access = write,注意,前面不要有空格或其他内容,必须顶格
[4]更新操作:svn update
5.客户端
①Eclipse插件
[1]安装插件
将插件压缩包解压到eclipse\dropins目录下,重启Eclipse
[2]创建SVN资源库位置:告诉Eclipse SVN服务器的地址
[3]在Eclipse中创建一个工程
[4]将新建的工程上传到SVN服务器:分享
[5]build目录:默认不纳入版本控制体系。当检出一个新的工程,自动创建了build目录后,可以将这个新创建的build目录排除。
build目录右键→Team→添加至:svn:ignore
[6]在Eclipse中检出工程
※图标含义
:表示当前目录或文件中没有未提交的内容
:表示当前目录或文件中包含未提交的内容
:表示刚创建,尚未纳入版本控制体系中的目录或文件
:刚刚加入版本控制体系
:表示当前文件处于冲突状态
②独立客户端:TortoiseSVN
③冲突
[1]过时的文件。例如:在版本为9的文件中进行修改,但服务器端最新的版本已经是10了,那么这个修改的文件就已经过时了。
[2]过时的文件不能提交,必须先更新再提交。
[3]过时的文件不一定会产生冲突,产生冲突的文件一定是先有过时。关键在于两边修改的是不是同一个位置。如果是同一行则会产生冲突,否则不会。
[4]冲突的表现
[5]冲突的解决:详细操作步骤见讲义
[6]冲突的避免
-
减少过时的文件:尽量在修改文件之前先更新这个文件
-
尽量不要很多人改同一个文件
-
加强团队成员之间的沟通
6.权限设置
①版本库中与权限设置相关的三个文件
svnserve.conf:对当前版本库的权限进行总体设置
passwd:设置用户名、密码
authz:分配权限
②svnserve.conf
# anon-access = write | 取消匿名访问 |
auth-access = write | 使用授权访问 |
password-db = passwd | 使用passwd文件配置用户名密码 |
authz-db = authz | 使用authz文件分配权限 |
③passwd:创建用户
kaifa01 = 123123 kaifa02 = 123123 ceshi = 123123 |
④authz:分配权限
kaifa = kaifa01,kaifa02 | 创建用户组 |
[/] @kaifa = rw ceshi = r * = | 针对版本库根目录进行设置 为用户组设置权限 为单个用户设置权限 表示除了上面设置过的用户以外,其他用户没有任何权限 |
7.查看历史记录
将匿名访问设置为none即可
anon-access = none |