一、安装svn

1、检查svn程序是否安装
rpm -qa subversion

2、安装
yum install -y subversion
##yum安装rpm包后本地不清除的方法
sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf
#rpm包下载后不清除
[root@k8s01 /]# rpm -qa subversion
subversion-1.7.14-16.el7.x86_64

二、配置并启动svn

建立svn版本库数据存储根目录(svndata)和用户、密码权限目录(svnpasswd)
mkdir -p /application/svndata #数据存储根目录
mkdir -p /application/svnpasswd #用户密码权限目录

启动svn服务指定服务的svn根目录
svnserve -d -r /application/svndata/ #--pid-file=... pid参数可加可不加

svnserver帮助
[root@k8s01 /]# svnserve --help
usage: svnserve [-d | -i | -t | -X] [options]
Valid options:
-d [--daemon] : daemon mode
-r [--root] ARG : root of directory to serve
--pid-file ARG : write server process ID to file ARG

[root@k8s01 /]# ps -ef|grep svn|grep -v grep
root 38105 1 0 17:06 ? 00:00:00 svnserve -d -r /application/svndata/
[root@k8s01 /]# ss -lnp|grep svn
tcp LISTEN 0 7 *:3690 *:* users:(("svnserve",pid=38105,fd=3))
[root@k8s01 /]# lsof -i tcp:3690
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
svnserve 38105 root 3u IPv4 114056 0t0 TCP *:svn (LISTEN)

三、创建项目版本库

创建一个新的Subversion项目sadoc,其实类似sadoc可以创建多个,每个项目对应不同的代码
[root@k8s01 /]# svnadmin create /application/svndata/sadoc
[root@k8s01 /]# ls -ld /application/svndata/sadoc/
drwxr-xr-x 6 root root 86 Mar 5 17:14 /application/svndata/sadoc/

svnadmin帮助命令
svnadmin help
svnadmin help create
create: usage: svnadmin create REPOS_PATH
--fs-type ARG : type of repository: 'fsfs' (default) or 'bdb'

四、调整svn配置文件及权限文件

1、调整svnserver.conf配置文件

cd /application/svndata/sadoc/conf/
cp svnserve.conf svnserve.conf.bk

vi svnserve.conf
19 anon-access = none
20 auth-access = write
27 password-db = /application/svnpasswd/passwd
34 authz-db = /application/svnpasswd/authz
#svnserver.conf中每个参数都要顶格写,开头不能有空格,更改完要重启
[root@k8s01 conf]# cat svnserve.conf|grep -v ^#|grep -v ^$
[general]
anon-access = none
auth-access = write
password-db = /application/svnpasswd/passwd
authz-db = /application/svnpasswd/authz
[sasl]
[root@k8s01 conf]# egrep "\-access =|\-db =" svnserve.conf
anon-access = none
auth-access = write
password-db = /application/svnpasswd/passwd
authz-db = /application/svnpasswd/authz

2、重启svn

#svnserver.conf中每个参数都要顶格写,开头不能有空格,更改完要重启
ps -ef|grep svn|grep -v grep |awk '{print $2}'|xargs kill -9
svnserve -d -r /application/svndata/
或者
pkill svnserver

3、拷贝密码和认证文件

把密码认证文件模板拷贝到上面设置的目录
cp passwd /application/svnpasswd/
cp authz /application/svnpasswd/
chmod 700 /application/svnpasswd/*
[root@k8s01 conf]# ls -l /application/svnpasswd/
-rwx------ 1 root root 1080 Mar 5 17:28 authz
-rwx------ 1 root root 309 Mar 5 17:28 passwd

4、设置账号和密码

[root@k8s01 conf]# cat /application/svnpasswd/passwd
[users]
# harry = harryssecret
# sally = sallyssecret
zhangsan = 123456
lisi = 123456
wangwu = 123456
##等号前为SVN账号,后面为密码,密码是明文
##更改svnserver.conf需要重启SVN,更改authz和passwd不需要重启

5、设置权限

注意:
#权限配置文件中出现的用户必须已在用户配置文件中定义
#对权限配置文件的修改立即生效,不必重启svn
用户组格式:
[groups]
= ,
#其中一个用户组可以包含一个或者多个用户,用户间用逗号分隔
#版本库目录格式
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
其中方框号内部分可以有多种写法:
[/],表示根目录及以下,根目录是svnserver启动时指定的/application/svndata/,[/]就是对全部版本库设置权限
[sadoc:/]对版本库sadoc设置权限
[sadoc:/world]对版本库中的world项目设置权限
[sadoc:/world/oldboy]对版本库sadoc中的world项目中的oldboy目录设置权限
权限主体可以是用户组,用户或者*,用户组在前面加@,*表示全体用户
权限可以是w,r,wr和空,空表示没有任何权限
authz中每个参数都要顶格写,开头不能有空格
对于组,要以@开头,用户不需要@开头

cat /application/svnpasswd/authz
[groups]
kaifa = zhangsan,lisi
ceshi = wangwu
[sadoc:/]
@kaifa = rw
@ceshi = r

大坑:
当时组设置成cesh,目录权限@ceshi,客户端连不上,服务器checkout报错
[root@k8s01 test1]# svn checkout svn://192.168.10.131/sadoc/ /application/test1/ --username=zhangsan --password=123456
svn: E220003: Unable to connect to a repository at URL 'svn://192.168.10.131/sadoc'
svn: E220003: Invalid authz configuration
原因是给不存在的组分配权限

6、登录访问

svn://192.168.10.131/sadoc
zhangsan 123456

#save authentication可以让TortoiseSVN在Subversion的缺省目录:%APPDATA%\Subversion\auth的三个子目录内保存认证信息
svn.simple里包含了基本认证方式所需要的的认证信息(用户名/密码),注意保存的密码是通过Wincrypt API加密的,不是文本信息
svn.ssl.server 里面包含了SSL服务器证书
svn.username里面包含了用户名认证的认证信息(不需要提供密码)

五、svn命令行

1、svn管理命令

svn --help
checkout (co) #从源码库取一个工作版本的拷贝
commit (ci) #提交当前工作拷贝的更改,这个地方可能出现代码冲突
copy (cp) #做一个工作拷贝的拷贝
delete (del, remove, rm) #删除本地或者svn server response上的文件或者目录
diff (di) #比较某个文件与库中的对应文件的不同
export #导出一个无版本控制的目录树拷贝,一般用于导出发行,或者投入运行的版本

2、从svn库提取数据

mkdir -p /application/test1/
svn checkout svn://192.168.10.131/sadoc/ /application/test1/ --username=zhangsan --password=123456
##更新数据
cd /application/test1/
svn up .
##提交数据
echo hell>test.log
svn add test.log
svn commit test.log -m "commit test.log"

3、中文乱码解决

有些时候更新文件,因为文件名是中文报这个错
svn: Can't convert string from 'UTF-8' to native encoding:
解决办法
export LC_CTYPE="en_US.UTF-8"
export LC_ALL=
然后查看
locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=