之前的开发一直用svn做版本控制,上个月买了阿里云ecs,有了一个自己的小服务器,网上找了教程安装和配置了SVN,在此回顾记录一下操作流程,以便日后查阅复习
背景:我的服务器linux版本是 Centos 6.5,安装了wdcp面板
一. 安装SVN
因为是安装了wdcp面板,在他们官网找了一篇安装svn教程,所以以下操作大都是基于该教程
教程地址: 点击打开链接
1 检查是否已经安装了subversion
# rpm -qa | grep subversion
如果安装了subversion 会显示相关的版本信息 subversion-1.6.11-15.el6_7.x86_64
如果版本过低,可以考虑卸载subversion
# yum remove subversion
2 安装subversion
# yum install subversion
3 验证是否安装成功
# svnserve --version
svnserve, version 1.6.11 (r934486)
compiled Aug 17 2015, 08:37:43
Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).
The following repository back-end (FS) modules are available:
* fs_base : Module for working with a Berkeley DB repository.
* fs_fs : Module for working with a plain file (FSFS) repository.
Cyrus SASL authentication is available.
以上信息显示 svn已经安装成功!
二. 配置
1 创建目录
# mkdir -p /www/svndata/pt
注意,这里的目录(项目名称)路径可以更改,格式如下: mkdir -p 目录路径(如:mkdir -p /www/svn/project)
2 新建一个版本仓库(使用svnadmin create 目录仓库路径与上面新建的目录要一致)
svnadmin create /www/svndata/pt
3 检查版本库是否创建成功
查看参考目录的内容
# ll /www/svndata/pt
drwxr-xr-x 2 root root 4096 Jan 1 14:35 conf
drwxr-sr-x 6 root root 4096 Jan 28 09:55 db
-r--r--r-- 1 root root 2 Dec 28 13:49 format
drwxr-xr-x 2 root root 4096 Jan 1 17:55 hooks
drwxr-xr-x 2 root root 4096 Dec 28 13:49 locks
-rw-r--r-- 1 root root 229 Dec 28 13:49 README.txt
以上目录存在说明已经创建成功!
4 配置用户
4.1打开仓库目录
# cd /www/svndata/pt
4.2 打开配置目录
# cd conf
4.3 编辑 passwd文件
# vim passwd
[users]
# harry = harryssecret
# sally = sallyssecret
pm = pm_pw
server_group = server_pw
client_group = client_pw
test_group = test_pw
配置格式:username = password
5 权限配置
编辑 authz文件
# vim authz
5.1 用户分组
[groups]
project_p = pm
project_s = server_group
project_c = client_group
project_t = test_group
格式:groupName = userName1,userName2
[project:/]
@project_p = rw
* =
[project:/server]
@project_p = rw
@project_s = rw
* =
[project:/client]
@project_p = rw
@project_c = rw
* =
[project:/doc]
@project_p = rw
@project_s = rw
@project_c = rw
@project_t = rw
* =
针对不同目录,配置权限
以上信息表示:只有pm有根目录的读写权,server_group能访问server目录,client_group能访问client目录,所有人都可以访问doc目录。
如果只是测试,多个用户可以分同一个组
[groups]
admin = pm,server_group,client_group,test_group
[/]
@admin = rw
6 服务svnserve.conf配置
打开编辑
# vim svnserve.conf
anon-access=none #未授权用户无读写权限
auth-access=write #授权用户有写权限
password-db=passwd#密码数据库的路径
authz-db=authz#访问控制文件
realm=/www/svndata/pt#认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字
realm 值为我们版本库的路径 以上配置项前面不要留空格
7 配置防火墙端口
# vi /etc/sysconfig/iptables
添加以下内容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
保存后重启防火墙
# service iptables restart
8 启动SVN
svnserve -d -r /www/svndata
9 查看SVN进程
#ps -ef|grep svn|grep -v grep
root 1742 1 0 Jan01 ? 00:00:00 svnserve -d -r /www/svndata/
10 检测SVN端口
#netstat -ln |grep 3690
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN
11 SVN 停止和重启操作
# killall svnserve //停止
# svnserve -d -r /www/svndata // 启动
12 我用了wdcp创建了一个pt站点 网站根目录 /www/web/pt/public_html
checkout一份到根目录
svn co svn://127.0.0.1/pt /www/web/pt/public_html --username pm --password pm_pw
pm 用户名
pm_pw 用户密码
-----------------------------------------------------------------------
注意! 你的密码,对于认证域:
<svn://127.0.0.1:3690> pt
只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。
你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
来避免再次出现此警告。
-----------------------------------------------------------------------
保存未加密的密码(yes/no)?
输入“yes” 回车,因为版本仓库还没有添加任何文件,所以取出版本为0,如下:
取出版本 0。
13 配置SVN的钩子 实现SVN版本库与网站根目录实现同步
为了可以在修改完代码提交到SVN服务器后,WEB服务器直接同步.需要配置SVN的钩子,进入hooks目录,
# cd /www/svndata/pt/hooks
# ls
可以看到有一个post-commit.tmpl文件,这是一个模板文件,复制一份放在此目录下,命名为post-commit,并将其用户组设为www,并设置为可执行:
# cp post-commit.tmpl post-commit
# chown www:www post-commit
# chmod +x post-commit
这样就有了访问www目录的权限。
里面原有的代码全部注释掉.这里可以执行shell命令,每次commit完成后都会调用此文件.
文件内容参考以下:
# vi post-commit
#!/bin/sh
export LANG=zh_CN.UTF-8
REPOS="$1"
REV="$2"
SVN_PATH=/usr/bin/svn
WEB_PATH=/www/web/pt/public_html
LOG_PATH=/tmp/svn_update.log
#/usr/bin/svn update --username user --password password $WEB_PATH --no-auth-cache
echo "\n\n\n##########开始提交 " `date "+%Y-%m-%d %H:%M:%S"` '##################' >> $LOG_PATH
echo `whoami`,$REPOS,$REV >> $LOG_PATH
$SVN_PATH update --username user --password password $WEB_PATH --no-auth-cache >> $LOG_PATH
chown -R www:www $WEB_PATH
说明:
1、#!/bin/sh 说明是执行shell命令 /*设定环境变量,如果没有设定可能会出现update报错*/
2、export LANG=zh_CN.UTF-8 是为了解决 svn post commit 中文乱码。
如果你是GBK编码可能会提示:Error output could not be translated from the native locale to UTF-8
这是客户端和服务器编码的问题,默认是utf-8,可尝试设置export LANG=zh_CN.GBK或者export LANG=en_US.UTF-8
#执行更新操作
3、 svn update –username 你版本库的用户名 –password 用户名的密码 svn ://你的IP地址:端口 /www/web/pt/public_html
4、chown -R www:www $WEB_PATH 更改文件夹属主为适合Web Server的
里面原有的代码全部注释掉.这里可以执行shell命令,每次commit完成后都会调用此文件。
14 客户端连接
地址: svn://服务器ip/pt
用户:pm
用户密码:pm_pw