SVN

1. 安装svn

[root@xuegod13 ~]# yum install -y subversion httpd mod_dav_svn            #包括HTTP所需模块一起装
[root@xuegod13 ~]# cat /etc/services |grep svn
svn             3690/tcp                        # Subversion
svn             3690/udp                        # Subversion
svnetworks      2973/tcp                # SV Networks
svnetworks      2973/udp                # SV Networks
svnet           3413/tcp                # SpecView Networking
svnet           3413/udp                # SpecView Networking
ml-svnet        4171/tcp                # Maxlogic Supervisor Communication

svn使用3690端口

[root@xuegod13 ~]# mkdir /webdept     #存放版本库的主目录
#创建两个版本库
[root@xuegod13 ~]# svnadmin create /webdept/www.xuegod.cn
[root@xuegod13 ~]# svnadmin create /webdept/www.godxue.cn 
# svnadmin命令是由subversion这个软件包提供的
[root@xuegod13 ~]# ll /webdept/www.xuegod.cn/ #随便查看一个版本库
总用量 8
drwxr-xr-x 2 root root  54 3月   3 10:33 conf
drwxr-sr-x 6 root root 233 3月   3 10:33 db
-r--r--r-- 1 root root   2 3月   3 10:33 format
drwxr-xr-x 2 root root 231 3月   3 10:33 hooks
drwxr-xr-x 2 root root  41 3月   3 10:33 locks
-rw-r--r-- 1 root root 229 3月   3 10:33 README.txt

dav目录:是提供apache与mod_dav_svn使用的目录,让他们存储内部数据,刚开始新建时此目录没有 db目录:就是所有版本控制的数据存放文件 hooks目录:放置hook脚本文件的目录 locks目录:用来放置subversion监控锁定数据的目录,用来追踪存取文件库的客户端 format文件:是一个文本文件,里面只放了一个整数。表示当前文件库配置的版本号 conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等),也是我们要关注的配置文件

[root@xuegod13 ~]# ls /webdept/www.xuegod.cn/conf/
authz  passwd  svnserve.conf
authz                         #认证权限相关
passwd                      #用户名和密码
svnserve.conf             #服务器配置文件

修改主配置文件

[root@xuegod13 ~]# cd /webdept/www.xuegod.cn/conf/
[root@xuegod13 conf]# ls
authz  passwd  svnserve.conf
[root@xuegod13 conf]# vim svnserve.conf
#19,20行去掉#
anon-access = read
auth-access = write
#27
password-db = passwd
#34
authz-db = authz
#39登录提示信息
realm = My First Repository for xuegod.cn
#或者按照下面的操作
[general]
anon-access = read             #原先注释掉了,匿名用户可以读,使用none的话就是匿名用户不可以访问
auth-access = write              #这几行都要取消注释,认证用户可以写,可以是read,write,none
password-db = passwd         #密码库文件,默认使用的是同一目录下的passwd文件作为用户密码库
authz-db = authz                #认证权限文件
realm = www.xuegod.cn      #登陆提示信息
注意:此配置文件的所有内容必须顶格(就是行前面不能有空格),否则会报错

配置用户和密码及认证权限

[root@xuegod13 ~]# vim /webdept/www.xuegod.cn/conf/passwd              //设置用户名和密码
[users]   
Make = 123456
MAN = 123456
top = 123456
#对于部分版本,前面的[users]是有#号的,如果有#号,一定要取消,否则只能使用匿名用户登录,客户端登录不会出现登录窗口或密码提示,除非在配置文件将anon设置为none,否则将返回一个错误
#这里的密码都是明文,没有加密
[root@xuegod67 ~]# vim /webdept/www.xuegod.cn/conf/authz        //设置用户和组的权限
[groups]                        #此行默认存在了    
Check = Make,MAN        	#定义组,在[groups]下面添加
                              	#用户组格式 用户组名 = 用户1,用户2
                               	#一个组可以包含多个用户,英文逗号间隔,用户名必须是在passwd中存在的
[/]                         	#/表示我当前所在版本库目录,这里代表www.xuegod.cn
top = rw
@Check = r           		#@Check表示这个组的权限,就是上面定义的组的成员
*=                           	#除了上面的有赋予权限成员之外,其他的成员都没有权限
 
#SVN目录格式:
#                       [/目录名]
#                       @用户组名 =权限
#                       用户名 =权限
#                       *=

2. 服务SVN启动及创建测试代码

2.1 以独立模式启动SVN

[root@xuegod13 ~]# svnserve -d -r /webdept/         
#启动了所有版本库, 再 –r。如果只需要某一个版本库,
后面添加/webdept/www.xuegod.cn/的版本库即可   -d=daemon -r=root of directory of save指定根目录
[root@xuegod13 ~]# ps -aux | grep svn   #查询到下面这行内容就可以了
root   2585   1  0 10:22 ?    00:00:00  svnserve -d -r /webdept/ 
[root@xuegod13 ~]# netstat -antup | grep svn     #查看端口正常
tcp      0     00.0.0.0:3690      0.0.0.0:*         LISTEN      48612/svnserve   

2.2 使用svn导入测试代码

导入测试代码格式:   svn [选项] 源码  svn://server ip/项目名 常见的选项: import:将未版本化的文件纳入版本控制并提交                     checkout:从版本库中检出一个修订版             update:更新工作拷贝                                 add,delete,copy,move:增、删、复制、移动文件或目录 status:检查状态差异                                      diff:检查文件行级详细差异 revert:恢复                                                            resolve:解决冲突 switch:切换工作拷贝对应的版本库分支              log:查看历史记录 list:显示文件目录                                                     cat:查看某个文件内容

[root@xuegod13 conf]# cd /opt/
[root@xuegod13 opt]# mkdir localsvn
[root@xuegod13 opt]# cd localsvn
[root@xuegod13 localsvn]# touch 1.html 2.jsp 3.py 4.sh 5.asp
[root@xuegod13 localsvn]# ls
1.html  2.jsp  3.py  4.sh  5.asp
[root@xuegod13 localsvn]# svn import /opt/localsvn/ file:///webdept/www.xuegod.cn/ -m "first edit"
正在增加       1.html
正在增加       5.asp
正在增加       3.py
正在增加       2.jsp
正在增加       4.sh

提交后的版本为 1。
#本地导入代码,使用file,仅仅能在服务器本地导入, -m=messages,类似注释,首次加入代码使用import
[root@xuegod13 localsvn]# svn checkout svn://192.168.31.13/www.xuegod.cn/ ~/downsource 
A    /root/downsource/1.html
A    /root/downsource/5.asp
A    /root/downsource/3.py
A    /root/downsource/2.jsp
A    /root/downsource/4.sh
取出版本 1。
[root@xuegod13 localsvn]# cd
[root@xuegod13 ~]# ls
anaconda-ks.cfg  downsource
[root@xuegod13 ~]# cd downsource/
[root@xuegod13 downsource]# ls
1.html  2.jsp  3.py  4.sh  5.asp

代码取出到downsource,会在当前目录新建这个目录 image.png

代码添加

[root@xuegod13 ~]# cd downsource/     #进入你取下代码的目录
[root@xuegod13 downsource]# touch 6.html       #新建代码
[root@xuegod13 downsource]# svn add 6.html     #添加到SVN服务中
[root@xuegod13 downsource]# svn commit -m "second edit"

添加到服务器上     image.png

[root@xuegod13 downsource]# svn commit -m "second edit"
认证领域: <svn://192.168.31.13:3690> My First Repository for xuegod.cn
“Make”的密码: 
认证领域: <svn://192.168.31.13:3690> My First Repository for xuegod.cn
用户名: top
“top”的密码: 

-----------------------------------------------------------------------
注意!  你的密码,对于认证域:

   <svn://192.168.31.13:3690> My First Repository for xuegod.cn

只能明文保存在磁盘上!  如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。

你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
来避免再次出现此警告。
-----------------------------------------------------------------------
保存未加密的密码(yes/no)?no
正在增加       6.html
传输文件数据.
提交后的版本为 2。

SVN+Apache SVN+Apache的需要subversion的两个动态库支持,同时我们需要密码的验证支持!  查看apache对svn模块的支持

[root@xuegod67 ~]# vim /etc/httpd/conf.modules.d/10-subversion.conf

配置apache支持svn

[root@xuegod67 ~]# vim /etc/httpd/conf.d/subversion.conf               #末尾添加这些行
<Location /webdept>
   DAV svn                     
   SVNParentPath /webdept                               #svn根目录
      AuthType Basic                                    #Basic认证方式
      AuthName "www.xuegod.cn website Dept"         	#认证显示信息,提示信息
      AuthUserFile /webdept/svn/passwd                  #用户密码文件
      AuthzSVNAccessFile  /webdept/svn/authz            #访问控制权限文件
      Require valid-user                                #要求正式用户,不能匿名
</Location>

创建用户passwd文件

[root@xuegod13 ~]# mkdir /webdept/svn
[root@xuegod13 ~]# htpasswd -c /webdept/svn/passwd user1
#第一次用c,创建,第二次就不用
[root@xuegod13 ~]# htpasswd /webdept/svn/passwd user2              
#第二次不能用-c,否则会覆盖webuser
[root@xuegod13 ~]# htpasswd  /webdept/svn/passwd user3
[root@xuegod13 svn]# cat /webdept/svn/passwd
user1:$apr1$3BUdI4Da$GtrIJKVmjFo7nCIT79x370
user2:$apr1$0uEGYLwi$Mc.U6OwkROguDiIdybQJG/

创建权限authz文件

[root@xuegod67 ~]# vim /webdept/svn/authz     #创建权限控制文件
[groups]
all = user1,user2
[/]                                      #“/”表示所有仓库的跟目录下
#user1 = rw
[www.xuegod.cn:/]                 #第一个仓库,user1和user2可以读写
@all = rw
[www.godxue.cn:/]                #第二个仓库目录,user2和user3可以读写
User2 = rw
User3 = rw
****************************************************************************

启动服务测试  [root@xuegod67 ~]# systemctl restart httpd 访问http://10.10.10.67/webdept/www.xuegod.cn            user1和user2可以读取,user3不可以 使用user1和user2用户效果: image.png 使用user3登陆测试: image.png 注意,在客户端上传文件时可能会报这样的错: image.png 这是因为apache用户没有写文件的权限,需要执行如下操作:

[root@xuegod13 svn]# ll /webdept/www.xuegod.cn/
总用量 8
drwxr-xr-x 2 root root  54 3月   3 11:29 conf
drwxr-sr-x 6 root root 253 3月   3 12:09 db
-r--r--r-- 1 root root   2 3月   3 10:33 format
drwxr-xr-x 2 root root 231 3月   3 10:33 hooks
drwxr-xr-x 2 root root  41 3月   3 10:33 locks
-rw-r--r-- 1 root root 229 3月   3 10:33 README.txt
[root@xuegod13 svn]# chown -R apache.apache /webdept/www.xuegod.cn/