SVN根据提交信息自动更新到不同站点目录
SVN根据提交信息自动更新到不同站点目录
这一篇跟大家分享SVN根据客户端提交代码时附带备注信息,将代码自动更新到不同站点目录。原理很简单,就是利用SVN钩子,获取用户提交时的信息,判断是否更新到指定目录。
一、新建仓库以及站点目录
我们新建一个仓库,名字就叫做svnCode,至于怎么新建,大家可以参考我之前写的这篇文章->centos下创建SVN仓库。然后我们分别在/home/www目录下新建两个站点,分别用作正式服跟测试服,
cd /home/www mkdir svnCodeTest mkdir svnCodeServer
仓库以及两个站点我们就准备完成。
二、利用钩子自动同步
我们创建一个规则,当我们提交代码时,附带信息是server时,代码自动同步到/home/www/svnCodeServer,每次提交都会自动同步到/home/www/svnCodeTest,我们先进到仓库钩子所在目录,并创建一个名字为post-commit文件,输入以下命令
#进入仓库钩子目录 cd /home/svn/svnCode/hooks #编辑钩子文件 vi post-commit
钩子内容我们就输入以下内容
#!/bin/sh REPOS="$1" REV="$2" export LANG="zh_CN.UTF-8" # 确保提交的时候必须填写提交备注 SVNLOOK=/usr/bin/svnlook #获取提交时备注信息 MESSAGE=$($SVNLOOK log -r $REV "$REPOS") #打印当前备注信息 echo "Target Message: $MESSAGE" #判断是否提交到正式 if [ "server" == "$MESSAGE" ]; then svn update /home/www/svnCodeServer --username hzx --password 123456 echo 'changes pushed to server' fi #更新到测试服 svn update /home/www/svnCodeTest --username hzx --password 123456 echo 'changes pushed to test'
编辑完记得保存,然后我们需要给该文件权限,防止报错,我们输入以下命令
chmod -R 777 post-commit
钩子的内容就是档我们提交了备注信息是server,代码附带同步到正式服所在目录,否则就只提交到测试服所在目录。
三、创建链接
我们需要将我们的两个站点目录跟svn仓库进行连接,我们输入以下命令
svn co file:///home/svn/svnCode/ /home/www/svnCodeTest svn co file:///home/svn/svnCode/ /home/www/svnCodeServer
四、验证流程
我们本地链接好我们的远程仓库,我们先创建一个1.txt文件,不填写附带信息,看看测试服所在目录是否有该文件,正式服没有该文件
可以看到测试服里有了1.txt文件,正式服是没有。
然后我们再新建一个2.txt文件,提交的时候我们附带server信息,看有没有同步到正式服
可以发现正式服里也有了1.txt跟2.txt。
这样我们就可以成功实现了SVN仓库根据客户端提交的备注信息,将代码同步到不同的目录下。
0条评论