linux 下svn同步更新钩子
svn服务器搭建:https://www.linuxidc.com/Linux/2017-05/144254.htm
SVN版本库中的一个项目:/svn/repositories/test/
网站目录:/web/test/
1、现将SVN版本库中的一个项目checkout到网站目录
svn co file://svn/repositories/test/ /web/test/
或者 svn co svn://(服务器ip)/test/ ./ (将项目检出到当前目录下)
2、简单同步更新思想
做法:通过检测svn提交,服务器更新固定目录,达到同步更新的目的。
优点:简单快捷
缺点:每次同步都需要更新整个目录,项目一多就容易卡,更新缓慢。
步骤如下:
新建一个post-commit钩子
vim /svn/repositores/test/hooks/post-commit
添加以下代码:
#!/bin/sh
REPOS="$1"
REV="$2"
export LANG="zh_CN.UTF-8" #防止乱码
#设置登陆账号密码并不缓存
svn update /web/test/ --username 帐号 --password 密码 --no-auth-cache
注意事项:
(1)不要遗漏第一行的#!/bin/sh,否则post-commit会报代号255的错误,
保存后,修改文件权限为755,否则SVN无法调用执行,这是一个比较安全的做法;
(2)或者直接修改post-commit的权限为777,可省略#!/bin/sh;
(3)文件权限修改:chmod 755 /svn/repositores/test/hooks/post-commit
3、同步更新优化思想
做法:通过检测svn提交,来获取具体的更新目录或文件路径,对应更新,达到优化的 目的。
优点:可大量缩短提交更新的时间
缺点:需调用php的exec函数,降低安全性
步骤如下:
(1)新建一个post-commit钩子
vim /svn/repositores/test/hooks/post-commit
添加如下代码:
#!/bin/sh
export LANG=en_US.UTF-8
REPOS="$1" # 仓库的路径
REV="$2" # 新提交的版本号
LOGTIME=$(date "+%Y-%m-%d") # 日志时间
UPFILE=/svn/log/"$LOGTIME "update.log # 钩子脚本的日志(需创建对应目录)
SVNLOOK=/usr/bin/svnlook # svn某一执行函数
changed=$($SVNLOOK changed -r $REV $REPOS) # 比较改变的文件
echo "$changed" >> $UPFILE # 输出比较结果到日志文件
# svn提交日志 start
LOGFILE=/svn/log/"$LOGTIME "svn.log # 钩子脚本的日志
# 脚本的标准输出和标准错误输出都打印到日志文件里
exec 1>>"$LOGFILE"
exec 2>&1
TIME=$(date "+%Y-%m-%d %H:%M:%S") #提交时间
AUTHOR=$($SVNLOOK author -r $REV "$REPOS") #提交作者
CHANGEDDIRS=$($SVNLOOK dirs-changed $REPOS) #修改的目录集合
MESSAGE=$($SVNLOOK log -r $REV "$REPOS") #提交时的备注信息,不建议用中文
function myecho() {
echo "$TIME" "$*"
}
myecho "**************************************************************"
myecho "提交版本:$REV 作者:$AUTHOR"
myecho "提交备注:$MESSAGE"
myecho "修改目录:$(echo $CHANGEDDIRS | tr '\n' ' ')"
# svn提交日志 end
/usr/local/php/bin/php /svn/repositories/test/hooks/svn_post_commit_resources.php # 执行脚本
注意:标红行根据实际情况对应修改,需手动创建日志目录
(2)新建一个php执行文件
vim /svn/repositores/test/hooks/svn_post_commit_rescources.php
添加以下代码:
<?php
//读取日志文件
$date_time = date('Y-m-d');
$f = file_get_contents('/svn/log/'.$date_time.' update.log');
//以换行分割字符串,获取对应数组
$files = explode("\n", $f);
//判断是否数组,不是则强制转为数组
if (!is_array($files))$files=(array)$files;
//循环更新对应目录
foreach ($files as $v) {
// 取文件名
$f_tem = trim(substr($v, 2));
// 获取更新文件名
$f_name = '/web/test2/' . $f_tem;
// svn更新命令
$cmd = "svn update '$f_name'";
//执行svn命令
exec($cmd, $out);
// exec($cmd);
//设置文件权限
exec("chown www:www $f_name");
}
//删除日志文件
// $rm_cmd = "rm -rf /svn/log/$date_time svn/log";
// exec($cmd,$out);
unlink('/svn/log/'.$date_time.' update.log');
exit();
linux 下svn同步更新钩子的更多相关文章
- linux下svn定时更新项目
方法一.用shell脚本定时更新项目 1.进入网站的根目录,假设项目位置放在/var/www/test cd /var/www/test 2.建立脚本文件update.sh,分两步进行.首先利 ...
- Linux 下SVN自动更新
1.找到svn的所在目录: 我的目录在/usr/local/svn/myproject 2.新建post-commit vim hooks/post-commit #!/bin/shexport LA ...
- linux下svn 搭建
linux 下SVN搭建加自动提交更新到指定目录一.安装#yum install subversion yum安装SVN#mkdir -p /opt/svn/repos 创建s ...
- linux下svn命令使用大全
最近经常使用svn进行代码管理,这些命令老是记不住,得经常上网查,终于找了一个linux下svn命令使用大全:1.将文件checkout到本地目录 svn checkout path(path是服务器 ...
- Linux下SVN命令
一下内容转载于:http://blog.chinaunix.net/space.php?uid=22976768&do=blog&id=1640924.这个总结的很好~ windows ...
- Linux下svn命令详解
本文主要是说明linux下svn命令的使用方法,同时记录自己在使用中遇到的一些疑惑. 1.Linux命令行下将文件checkout到本地目录 svn checkout url(url是服务器上的目录) ...
- linux下svn命令大全
linux下svn命令大全 1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/p ...
- linux下svn常用指令
windows下的TortoiseSVN是资源管理器的一个插件,以覆盖图标表示文件状态,几乎所以命令都有图形界面支持,比较好用,这里就不多说.主要说说linux下svn的使用,因为linux下大部分的 ...
- [转载]linux下svn常用指令
一下内容转载于:http://blog.chinaunix.net/space.php?uid=22976768&do=blog&id=1640924.这个总结的很好~ windows ...
随机推荐
- saltstack一键部署高可用
一健推送apache [root@server1 minions]# cd /etc/salt/ [root@server1 salt]# vim master [root@server1 salt] ...
- 基于wireshark抓包分析TCP的三次握手
1. TCP的三次握手 在TCP/IP协议通讯过程中,采用三次握手建立连接,从而保证连接的安全可靠. 所有基于TCP的通信都需要以两台主机的握手开始.这个握手过程主要是希望能达到以下不同的目的.[1] ...
- python发送微信
申请企业微信 使用python发送信息到企业微信,同时支持python2与python3环境,需要先申请一个企业微信,然后创建应用,获取以下三个信息 企业IP.Agentid.Secret 网信为创建 ...
- my22_mydumper 使用总结
1. mydumper 的安装依赖于mysql软件,要使用mydumper 则服务器上必须先安装mysql 2. mydumper 安装时会使用mysql软件的动态链接库文件,如果服务器上mysql版 ...
- 彻底理解和解决移动WEB开发中CLICK点透问题
在移动WEB开发中,有时候可能会出现点透问题,本文将围绕这个TAP点透问题,详细的讲述到底什么是点透,为什么会出现点透,如何避免出现点透,如果不可避免的出现了,如何解决解决移动WEB开发中CLICK点 ...
- gRPC框架
https://blog.csdn.net/shuanger_/article/details/47281381 https://grpc.io/ gRPC是利用通讯协议是HTTP2,序列化用prot ...
- Flume启动错误之:Bootstrap Servers must be specified
今天测试项目的时候需要启动Flume,然而在启动时遇到了Bootstrap Servers must be specified错误,错误日志如下: [kfk@bigdata-pro01 flume-- ...
- 如何有效防止DEDE织梦系统被挂木马安全设置(仅供参考)
尊敬的客户,您好! 感谢广大客户对我司工作的信任和支持! 我司在最近的一个多月内陆续发现多起因 DedeCMS 安全漏洞造成网站被上传恶意脚本的事件,入侵者可利用恶意脚本对外发送大量 ...
- POJ 3020——Antenna Placement——————【 最小路径覆盖、奇偶性建图】
Antenna Placement Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u S ...
- stl::iterator汇总
STL——iterator 一.概述Iterator(迭代器)模式又称Cursor(游标)模式, 根据STL中的分类,iterator包括:Input Iterator:只能单步向前迭代元素,不允许修 ...