1.为什么要使用SVN?

为了解决多人协同开发环境下的具体问题。

2.什么是SVN?

SVN是Subversion的简称, 是一款版本控制工具。

常见版本控制工具:CVS→SVN→GIT

3.SVN工作模式

     (1)C/S结构

     (2)三个基本操作

①检出:只做一次

②更新:经常

③提交:经常

机器学习SVN算法介绍 svn详解_机器学习SVN算法介绍

4.服务器端安装和配置

(1)服务器端程序的安装

     ①运行Setup-Subversion-1.8.9-1.msi

     ②一直下一步

     ③在安装过程中选择安装目录时使用非中文无空格目录

  安装好之后会自动在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

机器学习SVN算法介绍 svn详解_subversion_02

⑤启动服务器端程序:命令行启动

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详解_机器学习SVN算法介绍_03

执行检出命令后,会在目标目录自动创建一个隐藏的.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

④验证

机器学习SVN算法介绍 svn详解_subversion_04

(2)≥Luna:再次不具体示例。

(3)基本操作

     ①创建工程上传到SVN服务器。

   检出一个项目后需要将build目录添加至svn:ignore

     ③冲突

[1]冲突的起因都是有“文件过时 ”。文件过时含义:修改当前文件时所依据的版本已经不是服务器端最新的版本。

[2]过时的文件不能提交,必须更新后才可以提交。

[3]如果更新下来的文件和当前文件修改的是同一个位置,那么就会产生冲突。

[4]冲突的表现1:在冲突文件内部

机器学习SVN算法介绍 svn详解_机器学习SVN算法介绍_05

[5]冲突的表现2:增加3个文件

以mine为扩展名的文件中是冲突时的本地文件内容

以r小版本号为扩展名的文件中是冲突的服务器端文件内容

以r大版本号为扩展名的文件中是冲突后服前务器端文件的最新内容

[6]解决冲突

(4)图标含义

机器学习SVN算法介绍 svn详解_版本控制工具_06

:当前目录或文件中没有未提交的修改

机器学习SVN算法介绍 svn详解_subversion_07

:新创建出来,尚未纳入版本控制体系

机器学习SVN算法介绍 svn详解_版本控制工具_08

:已加入版本控制体系

机器学习SVN算法介绍 svn详解_服务器端_09

:表示有未提交的修改

机器学习SVN算法介绍 svn详解_机器学习SVN算法介绍_10

:表示当前文件发生了冲突

(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)查看资源历史记录

机器学习SVN算法介绍 svn详解_subversion_11

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

8.客户端工具使用:TortoiseSVN

(1)图标含义参照

机器学习SVN算法介绍 svn详解_机器学习SVN算法介绍_12

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


机器学习SVN算法介绍 svn详解_服务器端_13


机器学习SVN算法介绍 svn详解_版本控制工具_14