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

相关推荐