linux下搭建SVN
查看系统下有没有安装过⽼版本的svn:rpm -qa subversion,如果没安装过则什么都不显⽰
如果有⽼版本先运⾏⼀下yum -y  remove subversion,删除⽼版本。
第⼀步:通过yum命令安装svnserve,命令:yum -y install subversion
此命令会全⾃动安装svn服务器相关服务和依赖,安装完成会⾃动停⽌命令运⾏
若需查看svn安装位置,可以⽤命令:rpm -ql subversion
第⼆步:创建版本库⽬录(此仅为⽬录,为后⾯创建版本库提供存放位置,subversion默认是把/var/svn作为数据根⽬录的,开机启动默认也是从这⾥):mkdir /var/svn/svnrepos
第三步:创建svn版本库
在第⼆步建⽴的路径基础上,创建版本库:svnadmin create /var/svn/test(test为⽬录(项⽬或版本库)名称,后⾯checkout项⽬时会⽤到。)
创建成功后,进⼊test⽬录下,可以看见如下⽂件信息:cd /var/svn/test
conf:是这个仓库配置⽂件(仓库⽤户访问账户,权限)
format:是⼀个⽂本⽂件,⾥边只放了⼀个整数,表⽰当前⽂件库配置的版本号
hooks:放置hook脚步⽂件的⽬录
locks:⽤来放置subversion的db锁⽂件和db_logs锁⽂件的⽬录,⽤来追踪存取⽂件库的客户端
第四步:配置修改
进⼊conf,conf⽬录下,⼀共存放三份重要的配置⽂件,如下:
authz:负责账号权限的管理,控制账号是否读写权限
passwd:负责账号和密码的⽤户名单管理
修改f:f
原始⽂件内容,都被注释掉的,我们只需要去掉指定内容前注释即可,如下:
[general]
anon-access = none                #控制⾮鉴权⽤户访问版本库的权限
auth-access = write                #控制鉴权⽤户访问版本库的权限
password-db = passwd          #指定⽤户名⼝令⽂件名,即访问时要输⽤户名和密码
realm = test                    #指定版本库的认证域,即在登录时提⽰的认证域名称,改成⾃⼰的版本库
修改authz⽂件信息:vim authz
在⽂件内容的末尾,添加如下:
rw表⽰赋予此账号可读写的权限,r为读,w为写,注意[/]中的斜杠,这⾥如果斜杠反了,authz-db = authz ⼀直会提⽰“认证失败”
第⼀种⽅式:单个添加:
# 按账号分权限
[test/]
admin = rw
test = r
第⼆种⽅式(后⾯采⽤此⽅式配置):⽤户分组,再设权限
[groups]
# 按⽤户组分权限
admin = admin,admin1 # admin为⽤户组,等号之后的为⽤户
test = test1, test2 # test为⽤户组,等号之后的为⽤户
[/] # 表⽰svn仓库⽬录(/var/svn/test),test: 对应前⾯配置的realm = test
@admin = rw # 表⽰admin组对仓库(/var/svn/test)⽬录有读写权限,r为读,w为写
@test = r # 表⽰test组的⽤户对对仓库(/var/svn/test)⽬录只有读的权限
[/test1] # 表⽰test1⽬录(/var/svn/test/test1)
@test = rw # 表⽰test组对test1⽬录有读写权限
* =
备注:版本库的⽬录格式如下:
[<;版本库>:/项⽬/⽬录]
@<⽤户组名> = 权限
<⽤户名> = 权限
其中[]內容有許多写法:
[/],表⽰根⽬录及其⼀下的路径,根⽬录是svnserver启动时指定好的,上述实例中我们指定为:/svn/svndata([/]=/svn/svndata).[/]就是表⽰对全部版本设置的权限
[test:/],表⽰对版本库test设置权限;
[test:/svnadmin],表⽰对版本库test中的svnadmin项⽬设置权限;
[test:/svnadmin/second],表⽰对版本库test中的svnadmin项⽬的⽬录设置权限;
权限的主体可以是⽤户组,⽤户或者*,⽤户组在前⾯要以@开头,*表⽰全部⽤户
权限分为:r ,w, rw和null ,null空表⽰没有任何权限。
auhtz配置⽂件中的每个参数,开头不能有空格,对于组要以@开头,⽤户不需要。
修改passwd⽂件信息:vim passwd
直接将账号和密码信息追加到⽂件中即可,格式为:账号 = 密码,这⾥上⾯如果是设的分组,仍需设置每个⾓⾊对应的密码例如:admin = 123@qwe
到此,配置已经全部完成,账号信息已经添加成功
更改f时需要重启SVN服务才⽣效,更改authz,passwd⽂件时则不需要重启服务
第五步:防⽕墙开启
多数情况下服务器安装完成,配置完成后,⽆法连接svn服务器,均是防⽕墙问题
配置防⽕墙端⼝
⾸先要明确CentOS7的默认防⽕墙为firewallD。subversion的默认端⼝为3690,如果没有打开会报错:
1: sudo firewall-cmd --permanent --add-service=telnet
2: sudo firewall-cmd --permanent --add-port=3690/tcp
3: sudo firewall-cmd --reload
centOS 7 防⽕墙开启、关闭与查看状态:
systemctl start firewalld
systemctl stop firewalld
systemctl status firewalld
出现以下情况则代表防⽕墙没启动⽤systemctl status firewalld查看防⽕墙状态
启动防⽕墙
配置
六:启动svn服务器
# -d : 守护进程  -r : svn数据根⽬录
svnserve -dr /var/svn            #⽤root权限启动
查看SVN服务:
ps aux|grep svnserve              #默认端⼝为:3690
设置开机启动
在centos7,设置开机启动:
sudo systemctl enable svnserve.service  #注意:根⽬录必须是/var/svn 这样才能设置成功!!
设置开机启动后就可以按下⾯的⽅式开启或停⽌服务了
systemctl start svnserve.service
systemctl stop svnserve.service
7:检出项⽬
进⼊windows 检出项⽬地址栏输⼊ svn://项⽬ip:3690/test
项⽬ip可以通过 ip addr 或者 ifconfig 查看 inet,test 为当初建⽴的SVN版本库可以从上⽂寻
注释掉:authz-db = authz
再次检出(admin,有读写权限)
在检出⽬录下新建个⽂档提交,成功
清除SVN记录的账号信息:SVN设置_已保存数据_清除
如果报这样的错:svn: E204900: Can't open file '/var/svn/wangwa/format': Permission denied的错误。那就是与SELinux有关系,这⾥有两种处理⽅式:
linux中netstat命令1、把SELinux关闭
  临时关闭:sudo setenforce 0
  永久关闭:sudo vim /etc/sysconfig/selinux
  修改:SELINUX = disable              #值修改为disable.
2、svn与SElinux的设置(未测试)
  [root@localhost root]# chcon -R --reference=/var/svn /var/svn
  [root@localhost root]# restorecon -v -R /var/svn
异常及解决:
如果提⽰:svnserve: Root path '/var/svn' does not exist or is not a directory.⽬录不存在
修改etc/sysconfig/svnserve配置⽂件将OPTIONS="-r /var/svn"改成⾃⼰的svndata⽬录如"-r/svndata/test"
如果提⽰:svnserve: E000098: Can't bind server socket: Address already in use 端⼝被占⽤
先⽤命令 >netstat -ntlp列出所有端⼝占⽤情况,到端⼝3690的PID,结束掉些进程: kill PID号;再启动