SVN在团队开发中使用非常普遍,是一个很方便的版本控制系统。
如果要是能将SVN服务器上的数据自动发布到Web服务器,那将是整个项目开发、测试更加便捷。利用SVN的hook功能就能实现将SVN服务器上的数据同步到Web服务器。
思路:
找到SVN Server中的仓库(Repositories)文件夹的位置,在相应的项目文件夹中找到hooks文件夹。在该文件夹中添加一个post-commit文件;当有commit动作发生时(提交到SVN Server时)就会执行这个post-commit文件,在该文件实现数据的复制。
1.创建web目录(已有目录则略过)
cd /var
mkdir www
chmod 777 www
2.检出副本到/var/www
svn co file:///var/svn/foo
此时web目录是SVN版本库的一个工作副本
3.增加hooks(钩子)文件
在/var/svn/foo/hooks/目录中
# start-commit 提交前触发事务
# pre-commit 提交完成前触发事务
# post-commit 提交完成时触发事务
# pre-revprop-change 版本属性修改前触发事务
# post-revprop-change 版本属性修改后触发事务
我们这里只需要修改post-commit文件:
cp post-commit.tmpl post-commit
编辑该文件
#!/bin/sh
# 配置库地址
REPOS="$1"
REV="$2"
# WEB目录
BASEPATH=/var/www
WEBPATH="$BASEPATH/"
# 避免中文信息乱码
export LANG=zh_CN.UTF-8
# 可以配合svnlook命令更新指定目录
svn update $WEBPATH --username user1 --password password1 --no-auth-cache
保存后需要修改post-commit文件权限为755,否则SVN无法调用执行
chmod 755 post-commit
里面原有的代码全部注释掉.这里可以执行shell命令,每次commit完成后都会调用此文件。
说明:
1、#!/bin/sh 说明是执行shell命令
2、export LANG=zh_CN.UTF-8 是为了解决svn post commit 中文乱码。
如果你是GBK编码可能会提示:Error output could not be translated from the native locale to UTF-8
这是客户端和服务器编码的问题,默认是utf-8,可尝试设置export LANG=zh_CN.GBK或者export LANG=en_US.UTF-8
3、svn update –username 你版本库的用户名 –password 用户名的密码
svn://你的IP地址:端口/repos/project /web/project