SVN详解

1.为什么要使用SVN?
为了解决多人协同开发环境下的具体问题。

2.什么是SVN?
SVN是Subversion的简称, 是一款版本控制工具。
常见版本控制工具:CVS→SVN→GIT

3.SVN工作模式
     (1)C/S结构
     (2)三个基本操作
①检出:只做一次
②更新:经常
③提交:经常

4.服务器端安装和配置
(1)服务器端程序的安装
     ①运行Setup-Subversion-1.8.9-1.msi
     ②一直下一步
     ③在安装过程中选择安装目录时使用非中文无空格目录
     ④使用svn --version命令验证出现如下内容就证明安装成功( 安装好之后会自动在path文件中注册,如果安装不成功,我们需要在后面加一个;这样在验证就可以了)
C:\Users\Creathin>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”方案
(2)配置服务器端版本库
①目的:创建一个专门的目录用来为SVN程序保存数据
②第一步:自己创建一个文件夹
③第二步:在命令行执行svnadmin create命令,命令的格式是
svnadmin create D:\DevRepository\Subversion
  ④结果
⑤启动服务器端程序:命令行启动
svnserve -d -r D:\RepSVN\CRM
问题:如果使用D:\RepSVN\CRM作为版本库根目录启动服务器,那还能够访问ERP或OA目录下的数据吗?
 不能访问,这是一种单仓库的启动方式。
问题:如何配置多仓库的启动方式?
svnserve -d -r D:\RepSVN
将来需要访问CRM或OA时专门指定即可
问题:如何确认SVN服务器已经启动?
netstat -an:命令查看3690端口是否被监听
(3)启动服务器端程序:注册为Windows服务形式启动(推荐使用)
①借助于Windows系统的sc.exe程序,在命令行窗口中是sc命令
②使用sc命令的create子命令创建服务
③创建服务器时需要指定服务的名称,指定服务对应的可执行程序的路径,指定服务默认的启动方式,指定依赖的协议
sc create 服务名 binpath= "可执行程序的路径 可执行程序本身运行时需要的参数" start= auto depend= Tcpip
※注意:上面的命令中要求所有的“=”左边不能有空格,右边必须有一个空格!
④binpath属性中的命令
D:\DevInstall\Subversion\bin\svnserve.exe --service -r D:\RepSVN
⑤完整的命令举例
sc create SVNService binpath= "D:\DevInstall\Subversion\bin\svnserve.exe --service -r D:\RepSVN" start= auto depend= Tcpip
            启动此服务:sc start 服务名(例如:sc start MySVNService)
          说明:打开命令行窗口运行 netstat an 查看3690端口是否被监听, 如果启动失败,那很有可能是binpath中的内容有错误,此时只能将已经创建的服务删除,重新创建。

5.客户端工具使用:命令行
(1)检出
执行检出命令后,会在目标目录自动创建一个隐藏的.svn目录。这个目录中保存了当前工作副本和服务器之间交互的重要信息,所以不要删除或修改这里面的内容。
工作副本:包含.svn的目录。   
(2)提交
①需要通过运行svn add命令将要提交的文件纳入到版本控制体系
D:\SVNSpace\Harry>svn add Hello.txt
A         Hello.txt
           ②提交文件时需要通过附加日志信息的方式进行必要的说明,以记录本次提交的相关情况,直接操作没有权限,所以接下来执行第三部,这一步在后续执行。
           ③提交文件需要具备服务器端目录的写权限,可以暂时将匿名访问功能打开。
D:\RepSVN\CRM\conf\svnserve.conf
使用文本编辑工具打开上面文件,编辑如下内容
anon-access = write
 注意:这其实是一个属性文件,所有内容都必须顶格,前面不能有其他内容,包含空格也不可以。
 ④提交命令举例
D:\SVNSpace\Harry>svn commit -m "My First Commit" Hello.txt
正在增加       Hello.txt
传输文件数据.
提交后的版本为 1。
(3)更新
D:\SVNSpace\Harry>svn update Hello.txt
正在升级 'Hello.txt':
U    Hello.txt
更新到版本 2。


6.客户端工具使用:Eclipse插件(推荐使用)
(1)Kepler
①解压eclipse_svn_site-1.10.5.zip文件
②复制到Eclipse的安装目录下的dropins目录下
③重启Eclipse
④验证

(2)≥Luna:再次不具体示例。
(3)基本操作
     ①创建工程上传到SVN服务器。
     ②build目录:由于存放的字节码文件在不同开发人员之间可能存在差异,从而造成冲突,所以build目录不加入版本控制体系,每个开发人员自己负责编译, 检出一个项目后需要将build目录添加至svn:ignore
     ③冲突
[1]冲突的起因都是有“文件过时 ”。文件过时含义:修改当前文件时所依据的版本已经不是服务器端最新的版本。
[2]过时的文件不能提交,必须更新后才可以提交。
[3]如果更新下来的文件和当前文件修改的是同一个位置,那么就会产生冲突。
[4]冲突的表现1:在冲突文件内部


[5]冲突的表现2:增加3个文件
以mine为扩展名的文件中是冲突时的本地文件内容
以r小版本号为扩展名的文件中是冲突的服务器端文件内容
以r大版本号为扩展名的文件中是冲突后服前务器端文件的最新内容

[6]解决冲突

(4)图标含义
:当前目录或文件中没有未提交的修改
:新创建出来,尚未纳入版本控制体系
:已加入版本控制体系
:表示有未提交的修改
:表示当前文件发生了冲突

(5)SVN中各种符号箭头含义
     [1].黄色感叹号(有冲突):
     这是有冲突了,冲突就是说你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许你提交,防止你的提交覆盖了别人的修改。
     [2].米字号(有本地修改代码):  这是说明你有未提交的本地代码。
     [3].问好(新加入的资源):   这说明该文件是项目中新增文件资源,新增资源可以是文件、图片、代码等。
     [4].红色感叹号(本地代码与库没有保持一致):  这说明本地代码跟库上没有保持一致,如果用户想修复,可以将带红色感叹号图标文件删除,直接update即可。
     [5].灰色向右箭头(本地修改过) : 本地代码没有及时上库。
     [6].蓝色向左箭头(SVN上修改过) : 记得更新代码后修改,提交前跟svn对比习惯。
     [7].灰色向右且中间有个加号的箭头(本地比SVN上多出的文件) : 修改完记得跟svn保持一致.
     [8].蓝色向左且中间有个加号的箭头(SVN上比本地多出的文件) , 删除该文件后,再次更新,将svn上文件全部更新下来.
     [9].灰色向右且中间有个减号的箭头(本地删除了,而SVN上未删除的文件) , 也就是说你删除确认后,一定要记得上库,跟svn保持一致
     [10].蓝色向左且中间有个减号的箭头(SVN上删除了,而本地未删除的文件) : 比对svn库上代码,确定需要删除后,更新svn(删除无用代码)。
     [11].红色双向箭头(SVN上修改过,本地也修改过的文件 ) : 这个表示本地和svn上都修改过,最好就是把本地修改合并到svn,修改代码前最后先更新。

7.权限控制
(1)基本设置:svnserve.conf
# anon-access = write——表示匿名用户没有任何权限
auth-access = write——表示授权用户有读写权限
password-db = passwd——表示使用passwd文件来设置用户名、密码
authz-db = authz——表示使用authz文件来进行授权
(2)设置用户名、密码:在passwd文件中
[users]
# harry = harryssecret 例子
# sally = sallyssecret 例子
kaifa01 = 123456
kaifa02 = 123456
ceshi = 123456
(3)分配权限:在authz文件中
[groups] ——创建用户组
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
kaifazu = kaifa01,kaifa02

[/] ——针对版本库根目录进行设置
@kaifazu = rw ——针对某个用户组进行设置
ceshi = r ——针对某个用户设置
* =——表示除了上面设置的用户,其他用户都没有任何权限
(4)查看资源历史记录

解决办法:将anon-access设置为none

8.客户端工具使用:TortoiseSVN
(1)图标含义参照


(2)汉化版和英文对比:

猜你喜欢

转载自blog.csdn.net/qq_31307253/article/details/73222680
今日推荐