假设你的web server domain是
http://your.com
网站存放于
/var/www/
需要在本机修改SVN后提交后,网站代码也随之更改。那么可以这样。
cd /opt/reposiory/hooks/
cp post-commit.tmpl post-commit
chown www-data:www-data post-commit
chmod a+x post-commit
nano post-commit
可以看到参数$1是repository
参数$2是revision
模板里面已经初始化了
svn update --username some --password one /var/dir
#svn update –-username some --password one /var/ppt
这里面说段小插曲。
一开始我是按照第二行写的。但是死活commit后不同步。
于是手动执行了post-commit,发现这样的提示
"跳过 –-username......"
我就奇怪了。怎么把username参数当目录来了?
把那行注释掉,重新手动输入了一下,终于好用了。
于是我就开始找问题所在了
分别在nano和vim里面看,没发现什么问题,都是一个短横线。
于是拿到editplus里面看,还是一样的短横线
火大了,于是开始算着两个字母的base64值,终于发现问题了
1 |
–-username |
算出来是IBMtdXNlcm5hbWU=
1 |
--username |
算出来是LS11c2VybmFtZQ==
看来确实不一样,于是粘贴到blog的mce编辑器里面,果然现原形了。
算出来是IBM的那个是异常一短2个横线就是一个中文破折号删掉一半那种。。折腾我半天!!!
另外还要注意到就是,使用SVN update的目标目录必须先check out一下,否则也会被skip。
如果系统使用中文环境,别忘了加utf8编码选项。
也就是这样
[bash]#!/bin/sh
REPOS="$1"
REV="$2"
#/usr/share/subversion/hook-scripts/commit-email.pl \
# "$REPOS" "$REV" [email protected]
export LANG=zh_CN.UTF-8
#
svn update --username some --password one /var/ppt[/bash]
SVN官方库中有好多hook脚本。利用hook机制可以实现很多功能。比如SVN更新邮件通知等
# For more examples and pre-written hooks, see those in
# the Subversion repository at
# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and
# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/
安全问题:
这样过去的目录会存在.svn目录,造成安全隐患
可以使用apache的RedirectMatch来保证安全。
例如:
RedirectMatch 301 (.*)\.svn(.*) http://g.cn/$1
见:http://ihipop.info/2010/12/1899.html
学习