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.png

可以看到测试服里有了1.txt文件,正式服是没有。

       然后我们再新建一个2.txt文件,提交的时候我们附带server信息,看有没有同步到正式服

2.png

    

3.png

可以发现正式服里也有了1.txt跟2.txt。

       这样我们就可以成功实现了SVN仓库根据客户端提交的备注信息,将代码同步到不同的目录下。

0条评论

发表评论