关于SVN的描述网上已经有很多了,是一个开源代码版本控制系统,也是众多中小公司内部使用的一款基于代码管理的软件,这里摘抄百度百科的两段说明如下。
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。
svn存储版本数据也有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。
CentOS上安装SVN其实就很简单了,无论是RPM还是yum,这里使用yum安装。
1
2
|
rpm -qa subversion
yum
install
subversion -y
|
按照很多教程的说法,把SVN的数据文件和密码权限等文件分开存放。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
[root@mylinux ~]
# mkdir -p /opt/svndata
[root@mylinux ~]
# mkdir -p /opt/svnpasswd
[root@mylinux ~]
# svnserve -d -r /opt/svndata
[root@mylinux ~]
# ps -ef|grep svn
root 1068 1 0 12:14 ? 00:00:00 svnserve -d -r
/opt/svndata
root 1070 995 0 12:14 pts
/0
00:00:00
grep
svn
[root@mylinux ~]
# netstat -lnt|grep 3690
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN
[root@mylinux ~]
# svnadmin create /opt/svn
svndata/ svnpasswd/
[root@mylinux ~]
# svnadmin create /opt/svndata/idc
[root@mylinux ~]
# tree /opt/svndata/idc/
/opt/svndata/idc/
├── conf
│ ├── authz
│ ├──
passwd
│ └── svnserve.conf
├── db
│ ├── current
│ ├──
format
│ ├── fsfs.conf
│ ├── fs-
type
│ ├── min-unpacked-rev
│ ├── rep-cache.db
│ ├── revprops
│ │ └── 0
│ │ └── 0
│ ├── revs
│ │ └── 0
│ │ └── 0
│ ├── transactions
│ ├── txn-current
│ ├── txn-current-lock
│ ├── txn-protorevs
│ ├── uuid
│ └── write-lock
├──
format
├── hooks
│ ├── post-commit.tmpl
│ ├── post-lock.tmpl
│ ├── post-revprop-change.tmpl
│ ├── post-unlock.tmpl
│ ├── pre-commit.tmpl
│ ├── pre-lock.tmpl
│ ├── pre-revprop-change.tmpl
│ ├── pre-unlock.tmpl
│ └── start-commit.tmpl
├── locks
│ ├── db.lock
│ └── db-logs.lock
└── README.txt
10 directories, 28 files
[root@mylinux ~]
# sed -i '/anon-access/s/# //' /opt/svndata/idc/conf/svnserve.conf
[root@mylinux ~]
# sed -i '/anon-access/s/read/none/' /opt/svndata/idc/conf/svnserve.conf
[root@mylinux ~]
# sed -i '/auth-access/s/# //' /opt/svndata/idc/conf/svnserve.conf
[root@mylinux ~]
# sed -i '/password-db =/s/# //' /opt/svndata/idc/conf/svnserve.conf
[root@mylinux ~]
# sed -i '/password-db =/s/passwd/\/opt\/svnpasswd\/passwd/' /opt/svndata/idc/conf/svnserve.conf
[root@mylinux ~]
# sed -i '/authz-db =/s/# //' /opt/svndata/idc/conf/svnserve.conf
[root@mylinux ~]
# sed -i '/authz-db =/s/authz$/\/opt\/svnpasswd\/authz/' /opt/svndata/idc/conf/svnserve.conf
[root@mylinux ~]
# cat /opt/svndata/idc/conf/svnserve.conf |grep -v "#"|grep -v "^$"
[general]
anon-access = none
auth-access = write
password-db =
/opt/svnpasswd/passwd
authz-db =
/opt/svnpasswd/authz
[sasl]
[root@mylinux ~]
# cp /opt/svndata/idc/conf/{passwd,authz} /opt/svnpasswd/
[root@mylinux ~]
# chmod 600 /opt/svnpasswd/{authz,passwd}
[root@mylinux ~]
# ll /opt/svnpasswd
total 8
-rw------- 1 root root 1080 Sep 1 12:33 authz
-rw------- 1 root root 309 Sep 1 12:33
passwd
[root@mylinux svnpasswd]
# sed -i '/^# sally/atest01 = 123456' passwd
[root@mylinux svnpasswd]
# sed -i '/^test01/atest02 = 654321' passwd
[root@mylinux svnpasswd]
# cat passwd |grep -v "#"|grep -v "^$"
[
users
]
test01 = 123456
test02 = 654321
[root@mylinux svnpasswd]
# echo -e "[idc:/]\ntest01 = rw\ntest02 = r" >>authz
[root@mylinux svnpasswd]
# tail -3 authz
[idc:/]
test01 = rw
test02 = r
[root@mylinux svnpasswd]
# /etc/init.d/svnserve stop
[root@mylinux svnpasswd]
# ps -ef|grep svn
root 1068 1 0 12:14 ? 00:00:00 svnserve -d -r
/opt/svndata
root 1491 995 0 13:21 pts
/0
00:00:00
grep
svn
[root@mylinux svnpasswd]
# pkill svnserve
[root@mylinux svnpasswd]
# ps -ef|grep svn
root 1494 995 0 13:22 pts
/0
00:00:00
grep
svn
[root@mylinux svnpasswd]
# svnserve -d -r /opt/svndata
[root@mylinux svnpasswd]
# ps -ef|grep svnserve|grep -v grep
root 1496 1 0 13:22 ? 00:00:00 svnserve -d -r
/opt/svndata
[root@mylinux svnpasswd]
# netstat -lnt|grep svnserve
[root@mylinux svnpasswd]
# netstat -tunlp|grep svnserve
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 1496
/svnserve
|
整个安装过程很简单,可以使用shell脚本安装,当然手工执行也可以接受,就不再赘述了。但是,启动SVN之后发现,使用/etc/init.d/svnserve stop关闭SVN服务,虽然命令成功执行了,但是SVN进程依然还在,所以就想创建一个svn的启动关闭脚本来完成,不用每次手工kill进程并启动,脚本内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#!/bin/bash
#####################################
##Created on Sep 1st by Jerry12356
#####################################
SvnPath=
/opt/svndata/
#SvnPort=`netstat -tunlp|grep svnserve|awk '{print $4}'|cut -d: -f2`
start(){
ps
-ef|
grep
svnserve|
grep
-
v
grep
>>
/dev/null
2>&1
if
[ $? -
ne
0 ];
then
svnserve -d -r $SvnPath
ps
-ef|
grep
svnserve|
grep
-
v
grep
>>
/dev/null
2>&1
[ $? -
eq
0 ] &&
echo
"SVN server started successful."
else
SvnPort=`
netstat
-tunlp|
grep
svnserve|
awk
'{print $4}'
|
cut
-d: -f2`
echo
"SVN server is already running(Port:$SvnPort)..."
exit
1
fi
}
stop(){
ps
-ef|
grep
svnserve|
grep
-
v
grep
>>
/dev/null
2>&1
if
[ $? -
eq
0 ];
then
pkill svnserve >>
/dev/null
2>&1
echo
"SVN server stopped successful."
else
echo
"SVN server is not running."
exit
127
fi
}
status(){
ps
-ef|
grep
svnserve|
grep
-
v
grep
>>
/dev/null
2>&1
[ $? -
eq
0 ] &&
echo
"SVN server is running."
||
echo
"SVN server is stopped."
}
case
"$1"
in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo
"Usage:$0 {start|stop|restart|status}"
exit
1
;;
esac
|
本文转自 jerry1111111 51CTO博客,原文链接:http://blog.51cto.com/jerry12356/1845189,如需转载请自行联系原作者