svn同步web服务器端
使用svnadmincreate创建一个版本库:
svnadmincreateREPO
每个版本库的目录下有一个hooks目录:
root@SVN:/home/svn/repo#ls/home/svn/repo/
confdavdbformathookslocksREADME.txt
在每个版本库下有hooks文件夹,里面有很多钩子程序:
root@SVN:/home/svn/repo#ls-lhooks/
total40
-rwxr-xr-x1www-datawww-data3322010-05-3016:47post-commit
-rw-r--r--1www-datawww-data20002010-05-3015:22post-commit.tmpl
-rw-r--r--1www-datawww-data16632010-05-2923:28post-lock.tmpl
-rw-r--r--1www-datawww-data23222010-05-2923:28post-revprop-change.tmpl
-rw-r--r--1www-datawww-data15922010-05-2923:28post-unlock.tmpl
-rw-r--r--1www-datawww-data34882010-05-2923:28pre-commit.tmpl
-rw-r--r--1www-datawww-data24102010-05-2923:28pre-lock.tmpl
-rw-r--r--1www-datawww-data27962010-05-2923:28pre-revprop-change.tmpl
-rw-r--r--1www-datawww-data21002010-05-2923:28pre-unlock.tmpl
-rw-r--r--1www-datawww-data28302010-05-2923:28start-commit.tmpl
在执行commit操作之后会自动执行post-commit这个钩子程序。
因此可以设置post-commit来自动更新:
操作步骤如下:
1.使用checkout建立一个工作复本
mkdir/home/web
root@SVN:/home#chownwww-data:www-dataweb
ls-lweb
drwxr-xr-x2www-datawww-data40962010-05-3016:15web
必须使用apache的所属用户和组(在ubuntu下面的是www-data)来执行:checkout
root@SVN:/home/web#sudosuwww-data
$cd/home/web
$svncheckouthttp://svn.love.com/svn/repo/www/
Authenticationrealm:<http://svn.love.com:80>RepoAuth
Passwordfor'www-data':
Authenticationrealm:<http://svn.love.com:80>RepoAuth
Username:jack
Passwordfor'jack':
-----------------------------------------------------------------------
ATTENTION!Yourpasswordforauthenticationrealm:
<http://svn.love.com:80>RepoAuth
canonlybestoredtodiskunencrypted!Youareadvisedtoconfigure
yoursystemsothatSubversioncanstorepasswordsencrypted,if
possible.Seethedocumentationfordetails.
Youcanavoidfutureappearancesofthiswarningbysettingthevalue
ofthe'store-plaintext-passwords'optiontoeither'yes'or'no'in
'/var/www/.subversion/servers'.
-----------------------------------------------------------------------
Storepasswordunencrypted(yes/no)?yes
连续输入2次"yes"
root@SVN:/home/web#ls-alwww/
drwxr-xr-x6www-datawww-data40962010-05-3016:18.svn
可以看到.svn的权限,userown、goupown都是www-data
2,使用svnupdate测试,看www-data用户是否有权限更新。
$svnupdate/home/web/www--usernamesvnuser--passwordsvnpasswd
在连续输入2次"yes"或者"no"之后、可以看到已经更新成功:
Storepasswordunencrypted(yes/no)?Atrevision37.
3,在hooks目录下面的添加一个post-commit脚本文件
#!/bin/sh
REPOS="$1"
REV="$2"
exportLANG=en_US.UTF-8
svnupdate/home/web/www--usernamesvnuser--passwordsvnpasswd
在客户端commit后报错
sudosuwww-data
$cd/home/svn/repo/hooks
$./post-commit
提示:
Storepasswordunencrypted(yes/no)?
在svnupdate--help中找到了--no-auth-cache这个参数:
--no-auth-cache:donotcacheauthenticationtokens
加上这个参数后终于可以了:
root@SVN:/home/svn/repo/hooks#catpost-commit
#!/bin/sh
REPOS="$1"
REV="$2"
exportLANG=en_US.UTF-8
svnupdate/home/web/www--usernamesvnuser--passwordsvnpasswd--no-auth-cache
参考资料来自:
http://blog.sina.com.cn/s/blog_4c5fc6950100h18b.html
为了便于排错,可以将脚本的错误输出、以及版本信息、执行用户的名称保存到日志里面。
#!/bin/sh
REPOS="$1"
REV="$2"
exportLANG=en_US.UTF-8
echo`whoami`,$REPOS,$REV>>/tmp/svn_hooks.log
svnupdate/home/web/www--usernamesvnuser--passwordsvnpasswd--no-auth-cache2>/home/web/svn_hook.log
相关推荐
pub_svnserve.conf的 pub_authz.conf的配置文件有非法字符的原因引起,需要查找pub_authz.conf提的非法内容比如多余的空格删除或直接将pub_authz.conf