最近遇到这样一个svn版本控制问题,我想实现一个版本库管理多个项目,因为我提交的权限设么的都是一个人,我就不想再重复去配置一个版本库,所有想把所有的项目集中在一个版本库中进行管理。/data/svn/davesvn是我的一个版本库目录,/data/svn/davesvn/door和/data/svn/davesvn/dvlwebsite是我的两个项目版本库文件夹,他们都属于davesvn这个版本库,对于网站根目录程序是/data/wwwroot/door 、/data/wwwroot/dvlwebsite。但是我只有一个钩子文件,我该如何实现两个项目代码的同步?

雷小天博客

这个问题的思路就是让钩子文件post-commit变成动态的钩子,我们提交哪个项目就更新哪个项目,在post-commit钩子文件中,我们是可以识别出版本库的一级目录的,即我们是可以识别出是更新了door文件夹的代码,还是dvlwebsite文件夹代码,这样就能动态的更新我们所要更新的代码,详细代码如下

//post-commit文件
#!/bin/bash
REPOS="$1"
REV="$2"
#DIR="/data/wwwroot/door"
export LC_ALL=en_US.UTF-8
export.UTF-8
SVNLOOK=/usr/bin/svnlook
CURDATE=$(date "+%Y-%m-%d %H:%M:%S")
AUTHOR=$($SVNLOOK author -r $REV "$REPOS")  #提交作者  
CHANGEDDIRS=$($SVNLOOK dirs-changed $REPOS) #修改的目录集合
MASTERDIR=$(echo "$CHANGEDDIRS" | head -1)  #CHANGEDDIRS里的主目录  
PROJECT=$(echo $MASTERDIR | awk -F / '{print $1}')  #工程目录

DIR="/data/wwwroot/"$PROJECT


echo "Code Deployed By at $CURDATE,$REPOS,$REV,$AUTHOR,$CHANGEDDIRS,$MASTERDIR,$PROJECT,$DIR" >>/data/svn/davesvn/hooks/deploy_log
/usr/bin/svn update $DIR --username leiwen --password leiwen@123 --no-auth-cache
if [$? ==0 ]
then
       echo "ok" >> /tmp/z.out
fi