通过 Subversion 的 hook 自动更新代码
Tuesday, 28. July 2009, 01:06:29
以下是设置的步骤:
切换到 root 用户。
# su -
导出项目。
# cd /home
# svn checkout --username USER_NAME --password USER_PASS http://localhost/svn/PROJECT_NAME/trunk/ PROJECT_NAME
# chown -R USER_NAME PROJECT_NAME
编写 shell 脚本。
# vi /home/USER_NAME/bin/svn_auto_update.sh
输入
#!/bin/sh
date >> /tmp/svn_auto_update
cd /home/PROJECT_NAME
echo "$1 --- $2" >> /tmp/svn_auto_update 2>&1
svn status | awk '/^?/ {print $2}' | xargs rm -Rvf >> /tmp/svn_auto_update 2>&1
svn update --username USER_NAME --password USER_PASS >> /tmp/svn_auto_update 2>&1
更改脚本的所有者。
# chown -R USER_NAME PROJECT_NAME /home/USER_NAME/bin/svn_auto_update.sh
设置 svn 的 hook。
# cd /home/svnrepo/PROJECT_NAME/hooks
# cp post-commit.tmpl post-commit
# chmod a+x post-commit
# vi post-commit
追加
date >> /tmp/svn_log /usr/bin/sudo -H -u USER_NAME /home/USER_NAME/bin/svn_auto_update.sh $REPOS $REV >> /tmp/svn_log &
把 apache 用户加入 sudoer。
# usermod -G apache USER_NAME
# visudo
追加
apache ALL=(USER_NAME) NOPASSWD: /home/USER_NAME/bin/svn_auto_update.sh
说明:
1.以上命令和代码中的 USER_NAME 是用户名,USER_PASS 使用户密码,PROJECT_NAME 是项目名,不同环境会有不同的名字。
2.以上设置,前提是 apache 和 subversion 在同一台机器上,svn 项目已经建立,apache 的 svn 设置也已经做好。








