使用SVN的post-commit hooks 同步推送代码到生产环境

假设你的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值,终于发现问题了

算出来是IBMtdXNlcm5hbWU=

算出来是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

Author Info :
  • From:使用SVN的post-commit hooks 同步推送代码到生产环境
  • URL:https://blog.ihipop.com/2010/12/1893.html
  • Please Reserve This Link,Thanks!
  • 《使用SVN的post-commit hooks 同步推送代码到生产环境》上有1条评论

    发表回复

    您的电子邮箱地址不会被公开。 必填项已用 * 标注