服务端下载http://subversion.apache.org/download/
客户端下载http://tortoisesvn.net/downloads.html
tar zxvf svn_install.tar.gz -C /home/soft/
其中svn_install.tar.gz 包含以下软件包:
apr-1.4.6.tar.gz
zxvf apr-util-1.4.1.tar.gz
pcre-8.12.tar.gz
httpd-2.4.2.tar.gz
sqlite-amalgamation-3071300.zip
neon-0.29.6.tar.gz
subversion-1.7.5.tar.gz
所需软件包 svn_install.tar.gz 百度云盘下载地址: http://pan.baidu.com/s/1bneTDpX
svn需要SQLite支持,下载sqlite-amalgamation-3071300.zip 下载链接http://www.sqlite.org/download.html
svn需要neon,用于svn 命令行支持http或者https协议访问svn 下载链接http://www.webdav.org/neon/
make && make install
编译安装好后:
检查
/usr/local/subversion/bin/svnserve –version
创建svn目录
mkdir -p /www/svn
创建svn仓库
/usr/local/subversion/bin/svnadmin create /www/svn/yeadong
chmod 755 /www/svn -R
chown apache.apache -R /www/svn
修改apache配置
vi /usr/local/apache/conf/httpd.conf 添加如下内容:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
注意:最好在LoadModule部分的末尾添加以上两行否则会load失败
再最末尾添加:
<Location /svn>
DAV svn
SVNListParentPath on
SVNParentPath /www/svn
AuthType Basic
AuthName “welcome to svn”
AuthUserFile /www/svn/passwd.conf
AuthzSVNAccessFile /www/svn/authz
Require valid-user
</Location>
将
User daemon
Group daemon
改为
User apache
Group apache
测试apache配置是否有误
/usr/local/apache/bin/apachectl -t
启动apache
/usr/local/apache/bin/apachectl start
将apache加入开机启动项
echo “/usr/local/apache/bin/apachectl start” > /etc/rc.local
创建apache认证密码文件
/usr/local/apache/bin/htpasswd -cm /www/svn/passwd.conf admin #第一次运行会自动创建passwd.conf文件,连续输入两次密码
/usr/local/apache/bin/htpasswd -m /www/svn/passwd.conf root #第二次运行只带参数-m即可,如果再带上-c参数会覆盖之前的配置
配置svn权限
vi /www/svn/authz 内容如下
[groups]
supergroup = admin,root
guest = test
[/]
@supergroup = rw
yeadong = r
* =
注意:apache有读取/www/svn/passwd.conf和 /www/svn/authz文件的权限,并且/www/svn目录及/www对其他用户有读权限
如将/www或者/www/svn目录设置为700,主属为root,那么apache及其他用户就没有进入/www/或者/www/svn目录的权限就更不可能读取该目录下的文件
重启http服务
访问svn 路径http://ip/svn/yeadong
#启动svn服务端,由于我们将apache和svn整合所以不需要启动svn服务
/usr/local/subversion/bin/svnserve -d -r /www/svndata/jfzy
增加提交时备注说明限定至少输入五个字符才能提交
cd /www/svn/yeadong/hooks
cp pre-commit.tmpl pre-commit
vi pre-commit
注释以下两行:
#$SVNLOOK log -t “$TXN” “$REPOS” | \
# grep “[a-zA-Z0-9]” > /dev/null || exit 1
根据实际情况修改以下一行:
SVNLOOK=/usr/local/subversion/bin/svnlook
添加以下几行:
LOGMSG=`$SVNLOOK log -t “$TXN” “$REPOS” | grep “[a-zA-Z0-9]” | wc -c`
#要求注释不能少于5个字符,您可自定义
if [ "$LOGMSG" -lt 5 ];then
echo -e “Empty log is not allowed,please input more than 5 chars comment.” 1>&2
exit 1
fi
注释掉commit-access-control.pl “$REPOS” “$TXN” commit-access-control.cfg || exit 1
注意pre-commit主属要为apache用户
chown apache.apache /www/svn/jfzy/hooks/pre-commit
进阶功能,svn提交完成之后触发post-commit钩子将代码rsync到线上服务器
进入svn仓库目录下的hooks目录
例如/www/svn/yeadong/hooks/
创建post-commit脚本
vi post-commit内容如下:
#!/bin/sh
#说明;必须手动checkout一份工作目录,并且注意svn服务的运行用户对该目录有所有权限
#一定要对svn update是否成功做判断在执行rsync,否则有可能代码错误导致更新出错
#修改svn工作目录父目录下的.subversion/servers文件,设置store-passwords = yes自动保存密码。
#或者执行svn的时候带–no-auth-cache,不缓存认证信息
export LANG=en_US.UTF-8
SVN=”/usr/local/subversion/bin/svn”
DST=”192.168.66.223″
RSYNC_PROJECT=”main”
SVN_SERVER=”http://192.168.1.178:8080/svn/yeadong”
SVN_USER=”admin”
SVN_PWD=”redhat”
SOURCE=”/code/yeadong_test”
LOG_DIR=”/tmp/svn_log”
[ ! -d LOG_DIR ] && mkdir -p ${LOG_DIR}
LOG_FILE=”${LOG_DIR}/svn_hooks_post-commit.log”
NEWTIME=`date +%F_%T`
echo “########执行时间${NEWTIME}##########” >>${LOG_FILE}
[ ! -d ${SOURCE} ] && echo -e “请手动执行以下命令:\n$SVN checkout ${SVN_SERVER} ${SOURCE} –username ${SVN_USER} –password ${SVN_PWD}\sed -i ‘/^#.*store-passwords.*$/
s/^.*$/store-passwords = yes/’ .subversion/servers”
update_svn ()
{
cd ${SOURCE}
$SVN update –username ${SVN_USER} –password ${SVN_PWD} –no-auth-cache
if [ $? -ne 0 ];then
echo “time:${NEWTIME} svn update failed” >>${LOG_FILE}
exit 1
elif [ $? -eq 0 ];then
echo “time:${NEWTIME} svn update complete >>${LOG_FILE}”
fi
}
rsync_code ()
{
/usr/bin/rsync -avz ${SOURCE}/main/* ${DST}::${RSYNC_PROJECT} >>${LOG_FILE} 2>&1
/usr/bin/rsync -avz ${SOURCE}/9wee_s0/* ${DST}::${RSYNC_PROJECT} >>${LOG_FILE} 2>&1
/usr/bin/rsync -avz ${SOURCE}/static/* ${DST}::${RSYNC_PROJECT}/webserver/webapps/root/ >>${LOG_FILE} 2>&1
}
update_svn
rsync_code
[ $? -eq 0 ] && echo “执行成功” >>${LOG_FILE} || echo “执行失败” >>${LOG_FILE}
说明:在任何svn客户端提交代码到svn服务器http://192.168.66.93:8080/svn/yeadong都会触发该脚本自动执行,如果脚本执行失败客户端会有相应提示
注意svn服务端运行用户对svn 工作目录需要具有所有权限,例如/code/yeadong_test 为svn客户端checkout的目录,而服务端是以apache用户运行的
所以chown -R /code/yeadong_test
svn常用命令
命令行checkout 版本库
mkdir /code
cd /code
迁出版本:
svn checkout http://192.168.50.144:8080/svn/yeadong –username yeadong –password 123456
导出(导出一个干净的不带.svn文件夹的目录树)
svn export http://192.168.50.144:8080/svn/yeadong –username yeadong –password 123456
更新版本:
svn update http://192.168.50.144:8080/svn/yeadong –username yeadong –password 123456
提交版本
svn commint
往版本库中添加新的文件
cd /code/yeadong/main
svn add anaconda-ks.cfg
svn commit -m “update” anaconda-ks.cfg
从版本库删除文件
svn delete -m “delete file” http://192.168.50.144:8080/svn/yeadong/main/anaconda-ks.cfg
svn commit
/root/.subversion/auth目录下存放认证账号密码
如果是简单明文认证一般存放在/root/.subversion/auth/svn.simple目录下
设置不保存密码切不提示
修改/root/.subversion/servers 在最末尾位置添加一行store-plaintext-passwords = no
或者执行执行在–username xxx –password xxx后面加上参数: –no-auth-cache
#启动svn服务端,由于我们将apache和svn整合所以不需要启动svn服务
svnserve -d -r /www/svndata/yeadong
原文请访问:http://www.dongyahui.cn/3949.html
转载于:https://blog.51cto.com/yeadong/1402051