一、安装https+svn
yum install mod_dav_svn subversion mod_ssl

二、设置apache
# 生成有效期100年的证书:
cd /etc/httpd/conf/
openssl req -new -x509 -keyout server.key -out server.crt -days 36500 -nodes

# 修改https证书指向
vi /etc/httpd/conf.d/ssl.conf
ServerName SVN
SSLCertificateFile /etc/httpd/conf/server.crt
SSLCertificateKeyFile /etc/httpd/conf/server.key

# 加载mod_dav_svn,删除这两行的注释
vi /etc/httpd/conf.modules.d/10-subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

# 加载mod_ssl(启用SSL,取消/etc/httpd/conf/httpd.conf中SSL配置行的注释,不同LINUX版本,配置文件路径或文件名各不相同,请自行修改)
vi /etc/httpd/conf.modules.d/00-ssl.conf
#Include /etc/httpd/conf/extra/httpd-ssl.conf
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

vi /etc/httpd/conf.d/subversion.conf
# 在 Location 部份加入AuthzSVNAccessFile /home/svn/repositories/conf/authz来支持基本验证,并将 Apache 指向实际放置版本库的地方。

DAV svn
SVNParentPath /home/svn/repositories
AuthzSVNAccessFile /home/svn/repositories/conf/authz
AuthType Basic
AuthName “Subversion repos”
# Require SSL connection for password protection.如果未启用https服务,请注释掉SSLRequireSSL。加入了这行,也会导致http服务无法访问svn。
# SSLRequireSSL
AuthUserFile /home/svn/repositories/conf/passwd
# Satisfy Any
Require valid-user

三、创建版本库及目录
mkdir -p /home/svn/repositories/conf
svnadmin create /home/svn/repositories/p1
# 设置权限
chown -R apache.apache /home/svn/repositories/p1
service httpd restart

四、配置修改,使用统一的账户和权限去管控多个项目,可以将多个项目的authz和passwd文件统一放在一处,在多个项目的svnserve.conf文件中配置这两个文件的绝对路径,并在authz中对不同的项目设置用户访问权限。
cd /home/svn/repositories/p1/conf
cp authz passwd /home/svn/repositories/conf

五、设置p1版本库的访问策略,在[general]中取消以下行的注释或者添加:
vi /home/svn/repositories/p1/conf/svnserve.conf
# 禁止匿名访问。可以是read、write,none,默认为read
anon-access = none
#经过认证的用户有写权限
auth-access = write
#指定用户存放用户名与密码的文件,该文件位于conf目录下名为passwd
password-db = /home/svn/repositories/conf/passwd
#指定权限配置文件名,filename 是相对仓库中 conf 目录的位置,也可以设置为绝对路径,默认为authz
authz-db = /home/svn/repositories/conf/authz
#设置版本库域,如果两个版本库的认证域相同,他们将使用相同的密码数据。(指定仓库的认证域. 该选项主要被客户端使用, 用来关联缓存的认证证书和特定的某个或某些仓库, 正因为如此, 除非多个仓库使用了相同的密码数据库, 否则的话, 最好把每个仓库的认证域都设置 成独一无二的值. 仓库认证域的默认值是它的 UUID)
realm = p1

六、创建SVN应用的用户及密码
6.1、创建SHA-512加密的密码文件
# 首次创建用户要用 -c5 这个选项。它会创建文件并用SHA-512将口令加密。如果非首次添加用户,请只使用 -5 选项,而不包含初次创建时的 -c。
[svn@testhost ~] htpasswd -c5 /home/svn/repositories/conf/passwd yourusername
New password:
Re-type new password:
Adding password for user yourusername
[svn@testhost ~] htpasswd -5 /home/svn/repositories/conf/passwd anotherusername
New password:
Re-type new password:
Adding password for user anotherusername
6.2、修改用户密码及删除用户(就算用htpasswd -p选项创建了不加密的passwd文件,APACHE也无法识别直接编辑文件来创建的用户和密码)。
# 修改AAA用户密码(与创建新用户命令相同)
htpasswd -5 /home/svn/repositories/conf/passwd AAA
# 删除已有的BBB用户
htpasswd -D /home/svn/repositories/conf/passwd BBB

七、SVN用户权限管理,
vi /home/svn/repositories/conf/authz
[版本库名称:版本库路径]
用户 = 访问权
[groups]
staffs = joe,george
p1users = harry,sally

#未设置权限人员不能阅读版本库
[/]
@staffs = rw
* =

[p1:/]
john = r
@p1users = rw
* =

八、SVN的备份与还原
# 备份版本库
svnadmin dump /path/to/repo > /tmp/repo.dump

# 还原版本库时,先创建库
svnadmin create /path/to/repo
# 导入备份的库文件
svnadmin load /path/to/repo < /tmp/repo.dump
# 设置权限
chown -R svn:svnusers /path/to/repo
chmod -R g+w /path/to/repo/db/

九、访问项目p1 URL
http://IP/p1

https://IP/p1

svn://IP/p1

访问项目p2 URL
svn://IP:3690/p2 (iP地址为你linux的ip,p2为前文创建的版本库名称。3690为svn默认端口,默认端口可以省略不写)