一:svn独立安装配置
svn服务器有2种运行方式
1.独立服务器 (例如:svn://xxx.com/xxx);
2.借助apache。(例如:http://svn.xxx.com/xxx);
1.svn安装
#最新版本svn需要sqlite的版本最低为3.7.15,yum自带sqlite版本为3.7.12,所以需要手动编译安装最新版本sqlite
wget http://www.sqlite.org/2013/sqlite-autoconf-3071700.tar.gz
tar xf sqlite-autoconf-3071700.tar.gz
cd sqlite-autoconf-3071700
./configure && make && make install && echo OK
编译安装subversion需要apr,apr-util这里apr apr-util安装略
wget http://mirrors.cnnic.cn/apache/subversion/subversion-1.8.1.tar.bz2
tar subversion-1.8.1.tar.bz2
cd subversion-1.8.1
./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
make && make install
为了方便下操作,把svn相关的命令添加到环境变量中:
echo “export PATH=$PATH:/usr/local/subversion/bin/” >> /etc/profile
source /etc/profile
/usr/local/subversion/bin/svnserve --version
如果显示如下,svn安装成功:
2.svn配置
1)创建svn库
创建 svn专用户 # useradd pocsvn
创建SVN版本库目录 #mkdir /home/pocsvn/project
创建SVN仓库 # svnadmin create /home/pocsvn/project/poc
版本仓库创建成功后,会在/home/pocsvn/project/poc/conf目录下生成三个配置文件:
authz #权限配置
passwd # 用户和口令配置
svnserve.conf # SVN服务配置
将目录 project 目录拥有者修改为 pocsvn 用户:
#chown -R pocsvn:pocsvn /home/pocsvn/project
#chmod 755 /home/pocsvn/project
2)配置passwd文件
vim /home/pocsvn/project/poc/conf/passwd
fuquanjun = fuquanjun #配置允许访问svn库的帐户,前面是用户名,后面是密码
3)配置authz(详细配置参考svn+apache)
4)配置svnserve.conf
vim /home/pocsvn/project/poc/conf/svnserve.conf
anon-access = read #匿名用户只读
auth-access = write #认证用户访问版本库的权限
password-db = /home/pocsvn/project/poc/conf/passwd #指定用户口令配置文件名
authz-db = /home/pocsvn/project/poc/conf/authz #指定权限配置文件名
5)启动svn
切换到pocsvn用户
#/usr/local/subversion/bin/svnserve -d -r /home/pocsvn/project
#默认的启动端口号为3690
-d 表示以 daemon 方式(后台运行)运行
-r 指定根目录是/home/pocsvn/project
#/usr/local/subversion/bin/svnserve -d –listen-port 9999 -r /home/pocsvn/project
–listen-port 9999表示使用9999端口,可以换成你需要的端口。但注意,使用1024以下的端口需要root权限;
这里编写一个svn服务启动脚本
#!/bin/bash # build this file in /etc/rc.d/init.d/svn # chmod 755 /etc/rc.d/init.d/svn # centos下可以用如下命令管理svn: service svn start(restart/stop) SVN_HOME=/home/pocsvn/project if [ ! -f "/usr/local/subversion/bin/svnserve" ] then echo "svnserver startup: cannot start" exit fi case "$1" in start) echo "Starting svnserve..." /usr/local/subversion/bin/svnserve -d -r $SVN_HOME echo "Finished!" ;; stop) echo "Stoping svnserve..." killall svnserve echo "Finished!" ;; restart) $0 stop $0 start ;; *) echo "Usage: svn { start | stop | restart } " exit 1 esac
6)查看后台进程
$ ps -ef | grep svn
root 2983 1 0 09:19 ? 00:00:00 svnserve -d -r /home/pocsvn/project
jackie 4570 2496 0 10:51 pts/1 00:00:00 grep svn
其实也可以将svn加入到开机启动
编辑rc.local文件:vi /etc/rc.d/rc.local
加入如下启动命令:
/usr/local/svn/bin/svnserve -d –listen-port 9999 -r /home/pocsvn/project
11、如果想停止svn,则使用如下命令:
killall svnserve
客户端连接SVN
在windows下比较好用的客户端是 TortoiseSVN ,下载地址:http://tortoisesvn.net/downloads.html
安装TortoiseSVN 在Windows下新建一个文件夹svn,右键点击文件夹,选择SVN Checkout:
地址如下:
svn://{your-server-ip}:9999/poc 或者 svn://{your-server-ip}/poc
二:源码配置svn+apache
1. 安装apache
pcre apr apr-util安装略
wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.6.tar.bz2
tar zxf httpd-2.4.6.tar.bz2
cd /usr/local/httpd-2.4.6
./configure --prefix=/usr/local/apache --enable-dav --enable-so --enalbe-maintainer-mode --enable-rewrite --with-deflate --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre
make && make install
2. 安装svn
#最新版本svn需要sqlite的版本最低为3.7.15,yum自带sqlite版本为3.7.12,所以需要手动编译安装最新版本sqlite
wget http://www.sqlite.org/2013/sqlite-autoconf-3071700.tar.gz
tar xf sqlite-autoconf-3071700.tar.gz
cd sqlite-autoconf-3071700
./configure --prefix=/usr/local/sqlite
make && make install
wget http://mirrors.cnnic.cn/apache/subversion/subversion-1.8.1.tar.bz2
tar subversion-1.8.1.tar.bz2
cd subversion-1.8.1
./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-sqlite=/usr/local/sqlite
make && make install
3. 在apache配置文件中加载svn模块
cp subversion-1.8.1/subversion/mod_authz_svn/.libs/mod_authz_svn.so /usr/local/apache/modules/
cp subversion-1.8.1/subversion/mod_dav_svn/.libs/mod_dav_svn.so /usr/local/apache/modules/
vim /usr/local/apache/conf/httpd.conf
LoadModule dav_module modules/mod_dav.so LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so 注:必须要先加载mod_sav_svn再加载mod_authz_svn,否则报错
4.配置 svn+apache
1)创建svn库
创建svn专用户 # useradd pocsvn
创建SVN 版本库目录 #mkdir /home/pocsvn/project
创建SVN仓库 # svnadmin create /home/pocsvn/project/poc
将目录 project 目录拥有者修改为 pocsvn 用户:
#chown -R pocsvn:pocsvn /home/pocsvn/project
#chmod 755 /home/pocsvn/project
2)配置svn依赖apache
sed -i ‘s/User daemon/User pocsvn/‘ /usr/local/apache/conf/httpd.conf
sed -i ‘s/Group daemon/Group pocsvn/‘ /usr/local/apache/conf/httpd.conf
sed -i ‘s/#ServerName.*/ServerName localhost/‘ /usr/local/apache/conf/httpd.conf
sed -i ‘s/[email protected]/[email protected]/‘ /usr/local/apache/conf/httpd.conf
vim /usr/local/apache2/conf/httpd.conf
<Location /home/pocsvn/project> DAV svn SVNParentPath /home/pocsvn/project #svn库的根目录,表示根目录下每个子目录都是一个版本库 AuthType Basic AuthName "welcome to project" #浏览器登陆时的提示信息。随便写 AuthUserFile /home/pocsvn/project/passwd #用户的密码信息 AuthzSVNAccessFile /home/pocsvn/project/poc/conf/authz #指向svn库的conf目录下authz Require valid-user #告诉apache在authfile中所有的用户都可以访问。如果没有它,则只能第一个用户可以访问新建库 </Location>
3)生成passwd文件
htpasswd -bc /home/pocsvn/project/passwd hello hello123
#在/home/pocsvn/project/下生成passwd文件,用户名为hello,密码为hello123
htpasswd -b /home/pocsvn/project/passwd hello2 hello123
#在/home/pocsvn/project/passwd文件中添加用户名为hello,密码为hello123
4)编辑用户权限文件 authz
vi /home/pocsvn/project/poc/conf/authz
[groups] #表示群组设置 admin = hello #表示admin群组里的成员有hello,如果要配置多个,用逗号分隔 develop = hello2 #表示develop群组里的成员有hello2,如果要配置多个,用逗号分隔 [poc:/] #表示仓库poc的根目录下的访问权限 hello = rw #poc仓库hello用户具有读和写权限 hello2 = r #poc仓库hello2用户具有只读权限 @admin = rw #表示群admin的成员都具有读写权限 @develop = r #表示群poc的成员都具有只读权限 [/] #表示在所有仓库的根目录下 * = r #表示对所有的用户都具有读权限
注:在编辑authz时,所有行都必须要顶头写,不能有缩进,否则报错。
5)修改权限
chmod 644 /home/pocsvn/project/passwd
chown -R pocsvn:pocsvn /home/pocsvn/project/passwd
6)启动apache
service httpd start
7)通过http访问方式
http://ip地址/home/pocsvn/project/poc 会提示输入用户名密码,进去以后就可以看到相关文件了。
8)linux客户端访问方式 svn co svn://192.168.2.185/poc
三:svn多版本配置实例
既可以通过Windows客户端访问,也可以通过http访问
代码仓库有三个仓库:project1,project2,project3
假设人员有3个人:eg1,eg3,eg5,
eg1,只能访问project1;
eg3,只能访问project2;
eg5,只能访问project3;
二 实现
创建svn用户 useradd svn
创建版本库/home/svn
mkdir /home/svn
cd /home/svn
//创建三个代码仓库
svnadmin create project1
svnadmin create project2
svnadmin create project3
//把两个权限配置文件复制到SVN
//根路径下,统一管理所有代码仓库
cd/projcet1/conf
cp authz passwd /home/svn
//打开配置文件
vi svnserve.conf
修改成如下:
anon-access = none //禁止匿名访问
auth-access = write
password-db = /home/svn/passwd //统一使用密码文件
authz-db = /home/svn/authz
realm = project1 //权限域名,很重要,写你的工程名
分别修改project2的svnserve.conf和上面一样,最后一行分别写
anon-access = none //禁止匿名访问
auth-access = write
password-db = /home/svn/passwd //统一使用密码文件
authz-db = /home/svn/authz
realm = project2 //权限域名,很重要,写你的工程名
分别修改project3的svnserve.conf和上面一样,最后一行分别写
anon-access = none //禁止匿名访问
auth-access = write
password-db = /home/svn/passwd //统一使用密码文件
authz-db = /home/svn/authz
realm = project3 //权限域名,很重要,写你的工程名
修改两个权限管理文件:
passwd文件
//用户名 = 密码
[users]
eg1 = 123
eg3 = 123
eg5 = 123
authz文件
[groups] //分组
admin = eg1
guest = eg3
guset1 = eg5
[/] //管理者拥有所有读写权限
* =
@admin = rw
[project1:/] //工程1的访问控制,guest1,2无法访问
@admin = rw
或
eg1 = rw
[project2:/]
@guest = rw
或
eg3 = rw
[project3:/]
@guest1 = rw
或
eg5 = rw
三 重启
svnserve -d -r /home/svn
停止命令 killall svnserve
实际测试:各组成员只能访问自己的项目,无权限查看别人的项目,只有管理员能查看所有项目工程。
四:http访问方式配置
vim /usr/local/httpd/conf/httpd.conf
<Location /home/svn> DAV svn SVNParentPath /home/svn AuthType Basic AuthName "welcome to project" AuthUserFile /home/svn/passwd_web AuthzSVNAccessFile /home/svn/authz Require valid-user </Location>
因为http方式访问需要的密码文件需要加密,所以这里重新创建了一份用户名和密码的文件
htpasswd -bc /home/svn/passwd_web eg1 123
htpasswd -b /home/svn/passwd_web eg3 123
htpasswd -b /home/svn/passwd_web eg5 123
将目录 project 目录拥有者修改为 pocsvn 用户:
#chown -R svn:svn /home/svn
#chmod 755 /home/svn
#chmod 644 /home/svn/passwd_web ###加强文件安全
采用http访问 http://ip地址/home/svn/project1 或者 http://ip地址/home/svn/project2
linux客户端访问 svn co svn://192.168.2.185/project1
假设在/home/svn/share下面还有二个项目game,mobile
方法如下:
mkdir /home/svn/share
svnadmin create /home/svn/share/game
svnadmin create /home/svn/share/mobile
修改相关文件
vim /home/svn/share/game/conf/svnserve.conf
anon-access = none //禁止匿名访问
auth-access = write
password-db = /home/svn/passwd //统一使用密码文件
authz-db = /home/svn/authz
realm = game //权限域名,很重要,写你的工程名
vim /home/svn/authz
[/] //管理者拥有所有读写权限
* =
eg1 = rw
[share/game:/]
eg5 = rw
[share/mobile:/]
eg1 = rw
vim /usr/local/httpd/conf/httpd.conf
<Location /home/svn> DAV svn SVNParentPath /home/svn AuthType Basic AuthName "welcome to project" AuthUserFile /home/svn/passwd_web AuthzSVNAccessFile /home/svn/authz Require valid-user </Location> <Location /home/svn/share> DAV svn SVNParentPath /home/svn/share AuthType Basic AuthName "welcome to project" AuthUserFile /home/svn/passwd_web AuthzSVNAccessFile /home/svn/authz Require valid-user </Location>
重新启动httpd服务
访问方式:http://ip/home/svn/share/game http://ip/home/svn/share/mobile输入用户密码就可
以看到相关内容。
Linux客户端访问 svn co svn://192.168.2.185/share/game
svn co svn://192.168.2.185/share/mobile
四:svn迁移
svnadmin 命令用法:
create :创建版本库
dump :数据备份
verify :版本校验
1,进入原始svn库所在路径
cd /data/svn
2,使用svnadmin将需要迁移的项目dump出来
svnadmin dump test > test.bak
3,在新服务器上安装服务端和客户端程序
yum install -y subversion
4,确定svn版本库存放路径,并使用svnadmin创建版本库
mkdir -p /data/svn
cd /data/svn
svnadmin create test
5,将备份出来的数据,导入到新的数据库
svnadmin load test < test.bak
6,数据导完后,确定conf下的几个文件:authz,passwd,svnserve.conf
7,配置svn启动脚本,并开启服务。
vim /etc/init.d/svnserve
args="--daemon --root /data/svn --pid-file=${pidfile} $OPTIONS"
参考:http://songxj.blog.51cto.com/620981/396113