一、svn安装:
SVN1.32http://subversion.tigris.org/d ... ar.gz
安装:
解压:#: tar zxvf subversion-1.3.2.tar.gz
进入:cd subversion-1.3.2
依次输入./configure , make , make install 进行编译安装完成。
如果这三步报错,可以考虑换 yum -y install subversion方式安装。
开启SVN服务:svnserve -d
检测服务是否开启:netstat -ntlp如果看到3690的端口正常开放了,证明SVN启动了。
二:建立SVN版本库:
1、创建版本库目录:#mkdir -p /data/svn
2、创建版本库:#svnadmin create /data/svn/davesvn/
3、编辑权限:
#vim /data/svn/davesvn/conf/svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd #还可以指定到其它目录都是可以的
authz-db = authz
realm = davesvn
4、配置允许访问SVN的用户
#vim /data/svn/davesvn/conf/passwd
[users]
leiwen = leiwen@123
5、配置用户访问权限相关
#vim /data/svn/davesvn/conf/authz
[groups]
admin = leiwen
# harry_and_sally = harry,sally
[/]
@admin = rw
* = r
#@admin = r
6、启动svnserve -d -r /data/svn/
其中:
-d表示以daemon方式(后台运行)运行
-r /data/svn指定根目录是/data/svn,如果提示Can't bind server socket那么就要kill pid 或者重新开个端口svnserve -d --list-port 3689 -r /data/svn
这里需要注意设置防火墙打开3690端口
7、现在有了仓库了就可以往仓库里面提交东西了。我们是以一个项目为单位的进行提交
#mkdir -p /data/wwwroot/door项目文件目录是在这。项目名称为door
7.1 #svn import -m 'project' /data/wwwroot/door svn://192.168.0.109/davesvn 这是本地添加到版本库
7.2#svn import /data/wwwroot/door file:///data/svn/davesvn/door -m 'initial import' 这是用Linux命令把网站根目录添加到版本库
这个时候就会让你输入用户名与密码了
8、从版本库中checkout东西
#mkdir door&& cd door表示全部的项目都存在这个目录下面
#svn checkout svn://192.168.1.109/davesvn/door 表示把davesvn中的door里面的项目搞出来,本地。
#svn checkout file:///data/svn/davesvn/door /data/wwwroot/door 表示把davesvn中的door里面的项目搞出来。
注:这里的IP也可用域名代替,svn端口默认为3690。
三、设置钩子:
本质是当SVN版本库接到上传或者更新一类的操作时会调用相应的脚本,所以可以直接在相应的脚本中写入要执行的操作进行代码同步。
我们现在来写一个成功svn-commit之后要触发的一个钩子:
#vim /data/svn/davesvn/hooks/post-commit
#!/bin/sh
REPOS="$1"
REV="$2"
export.UTF-8
svn up /dotproect --username *** --password *** ---更新本服务器上的代码,保持和版本库一致
保存即可。
实现原理:当用户提交commit动作发生都让另外一处project马上从仓库中进行代码checkout一份出来!
说明:post-commit会接受两个参数
REPOS="$1" /data/svn/davesvn表示svn仓库的绝对路径值
TXN="$2" 表示最新的一个版本号。最后一个版本号
来看看update的相关参数项
对它的描述如下:
Svn update会把版本库的修改带到工作拷贝(工作拷贝的理解其实就是一个工作区)中。如果没有给定修订的版本它就会把当前的工作拷贝更新到HEAD最新版本。否则就是它会把工作拷贝更新到指定的修订版本即—revision后面所带的参数值。为了保持同步svn update也会删除所有在工作拷贝发现的无效锁定。
正式的代码如下:
#vim /data/svn/davesvn/hooks/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
测试发现当我修改一个文件然后再commit提交的时候另外一个项目位置是可以。