使用svnadmin create 创建一个版本库:

svnadmin create cqzn_server

每个版本库的目录下有一个hooks目录:

# ls /home/svn/cqzn_server/
conf dav db format hooks locks README.txt

在每个版本库下有hooks文件夹,里面有很多钩子程序:

# ls -l hooks/
total 40
-rwxr-xr-x 1 www-data www-data 332 2010-05-30 16:47 post-commit
-rw-r–r– 1 www-data www-data 2000 2010-05-30 15:22 post-commit.tmpl
-rw-r–r– 1 www-data www-data 1663 2010-05-29 23:28 post-lock.tmpl
-rw-r–r– 1 www-data www-data 2322 2010-05-29 23:28 post-revprop-change.tmpl
-rw-r–r– 1 www-data www-data 1592 2010-05-29 23:28 post-unlock.tmpl
-rw-r–r– 1 www-data www-data 3488 2010-05-29 23:28 pre-commit.tmpl
-rw-r–r– 1 www-data www-data 2410 2010-05-29 23:28 pre-lock.tmpl
-rw-r–r– 1 www-data www-data 2796 2010-05-29 23:28 pre-revprop-change.tmpl
-rw-r–r– 1 www-data www-data 2100 2010-05-29 23:28 pre-unlock.tmpl
-rw-r–r– 1 www-data www-data 2830 2010-05-29 23:28 start-commit.tmpl

注:

  1. # start-commit 提交前触发事务

  2. # pre-commit 提交完成前触发事务

  3. # post-commit 提交完成时触发事务

  4. # pre-revprop-change 版本属性修改前触发事务

  5. # post-revprop-change 版本属性修改后触发事务

在执行commit操作之后会自动执行post-commit这个钩子程序。
因此可以设置post-commit来自动更新到线上服务器:
操作步骤如下:

1. 新建立一个工作副本。

mkdir /yin/

2、授权:--否则提交会报权限错误。

chmod 777 -R /yin/

3、进入该目录后,checkout出一个副本,用于同步上线上服务器的路径。

cd  /yin/

svn co svn://192.168.1.250/cqzn_server

注:此副本不能为空:此时该路径为:/yin/cqzn_server  --后面同步时候所需的路径

4、设置post-commit脚本以便同步到线上服务器。

cd  /home/svn/cqzn_server/hooks

mv post-commit.tmpl post-commit

并且修改这个文件:如下内容

vim post-commit

#Set variable

SVN=/usr/bin/svn

WEB=/yin/cqzn_server

#/yin/这个目录是上面创建出来做副本同步的目录。

RSYNC=/usr/bin/rsync

LOG=/tmp/rsync_cqzn_server.log

WEBIP="192.168.1.222"

#这个ip是线上web服务器的ip.

export LANG=en_US.UTF-8

$SVN update $WEB --username yinliang --password yinliang

if [ $? == 0 ]

then

echo ""     >> $LOG

echo `date` >> $LOG

echo "##############################" >> $LOG

chown -R nobody:nobody /yin/

$RSYNC -vaztpH  --timeout=90--exclude-from=/home/svn/exclude.list $WEB root@$WEBIP:/www/ >> $LOG

fi

#--exclude-from 可不要根据需求不同步的排除

5、修改完上面脚本后授执行权限。

chmod +x post-commit

综上所述:便可实现自动上传代码到线上服务器。

注:

注意几个场景:

这里的环境是SVN服务器与WEB服务器是开的

把SVN服务器定义为源服务器 WEB服务器为目的服务器

场景一、如果目的WEB服务器为综合的混杂的,像只有一个WEB静态资源,用户提交的,自动生成的都在WEB的一个目录下,建议不要用–delete这个参数

上面这个程序就是这样,实现的是源服务器到目的服务器的更新和添加,而没有删除操作,WEB服务器的内容会多于源SVN的服务器的

场景二、实现镜像,即目的WEB服务器与源SVN服务器一样的数据,SVN上任何变化WEB上一样的变化,就需要–delete参数

场景三、不需要同步某些子目录,可能有些目录是缓存的临时垃圾目录,或者是专用的图片目录(而不是样式或者排版的)要用exclude这个参数

注意:这个参数的使用不用写绝对路径,只要目录名称就行 aa代表文件 aa/ 代表目录 ,缺点就是如果有多个子目录都是一样的名称那么这些名称就都不会被同步

建议用–exclude-from=/home/svn/exclude.list 用文件的形式可以方便的添加和删除

exclude.list

.svn/

.DS_Store

p_w_picpaths/

利用SVN的钩子还可以写出很多的程序来控制SVN 如代码提交前查看是否有写日志,是否有tab,有将换成空格,是否有不允许上传的文件,是否有超过限制大小的文件等等。

注:

export LANG=en_US.UTF-8    ------这是为了解决svn post commit 中文乱码,设置本地化编码,也防止此脚本不能执行。

转载于:https://blog.51cto.com/darkyin/1361132

svn利用钩子post-commit自动更新到线上测试服务器相关推荐

  1. 利用python和Tushare自动更新A股每日数据

    利用python和Tushare自动更新A股每日数据 tushare ID :423004 所需接口 整体思路为: 1.利用stock_basic获取ts_code,获得沪深全部上市公司股票代码 2. ...

  2. svn利用钩子脚本功能实现代码同步到web目录

    一.hook简单介绍 为了方便管理员控制提交的过程 ,Subversion提供了hook机制.当特定的 事件发生时,相应的 hook会被调用,hook其实就相当于特定事件的处理函数.每个hook会得到 ...

  3. python tkinter 表格_python学习笔记(Tkinter编程利用Treeview实现表格自动更新)

    博主今天总结这段时间抽空写的一个GUI编程项目 功能是查看本地打印机队列,可选择指定队列重新打印 直接上图 UI设计包括3个区域左上方,右上方和下方列表区域 使用网格grid方法来分配位置 下面是界面 ...

  4. 发条js调试工具_小工具大帮手,利用 @open-node/antman 实现 node.js 进程线上调试,无须重启...

    @open-node/antman 窥探进程内部,让 Node.js 生产环境线上调试成为可能 解决了什么问题? 日常在开发服务端代码,很多是服务类型的,比如基于http的api,或者一些任务脚本,需 ...

  5. 禅道 bug状态 open_小工具大帮手,利用 @open-node/antman 实现 node.js 进程线上调试,无须重启...

    @open-node/antman 窥探进程内部,让 Node.js 生产环境线上调试成为可能 解决了什么问题? 日常在开发服务端代码,很多是服务类型的,比如基于http的api,或者一些任务脚本,需 ...

  6. 利用Github Actions部署自动更新PaddleOCR指定代码到指定仓库

    目录 引言 需求描述 解决方法 采用Github Actions功能 具体代码 总结 参考资料 引言 首先说呢,我也不想重复造轮子, 但是无奈,网上博客看了一大圈,却始终没有找到自己需要的东西 需求描 ...

  7. Excel VBA利用事件对图表自动更新

    Private Sub Workbook_SheetActivate(ByVal sh As Object) Dim shrt As Worksheet Dim rg As Range Dim rgC ...

  8. 易语言 ftp控制html,【原创】利用FTP实现软件自动更新

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 .版本 2 .支持库 internet .支持库 EThread .支持库 downlib .支持库 iext .子程序 版本比较 .局部变量 现行版本, ...

  9. 如何使用gnvm自动更新Windows10操作系统上的nodejs

    在Github上根据关键字gnvm搜索: 下载这个软件,是一个go语言开发而成的应用. 升级之前,我的nodejs版本号为8.11.3: 使用命令gnvm update latest更新: 升级完毕, ...

  10. java 热更新class_线上java热更新代码实现

    游戏上线后难免会有功能性bug,这些bug很多只做一些小的改动即可修复.设想假如每次有bug修复之后,都要重启服务器,势必会导致部分玩家流失,对游戏产生不好的影响.在这个背景下,代码热更新还是很有必要 ...

最新文章

  1. AR普及后的未来是怎样的?
  2. 14、计算机图形学——whited-style光线追踪
  3. 使用OpenCV进行相机校准
  4. VHDL数字秒表的设计
  5. java 标识符命名规则_java语言基础之标识符和命名规则详解
  6. 后缀自动机Suffix Links的应用
  7. vb 获取设备音量_自制 Windows 10X 启动盘,提前体验微软折叠设备新系统
  8. mysql对象资源管理器在哪里_文件资源管理器在哪
  9. 2022.03.15 Arcmap栅格数据无法按照拟定范围进行重分类的解决方案
  10. 单片机上位机下位机通信c语言,上位机和下位机通信的单片机程序
  11. elasticsearch与kibana踩过的坑
  12. pb 修改数据窗口种指定字段位置_PB数据窗口对象之字段操作
  13. 计算机键盘换挡键,换挡键alt电脑键盘上的用处有哪些
  14. 不定积分求解(三大方法)
  15. 魔众EDM邮件营销系统 v1.1.0 页面SEO优化,系统升级调整
  16. 基于Matlab的IMM雷达多目标跟踪
  17. java正则表达式 后顾_正则表达式 - CrazyManDF的个人空间 - OSCHINA - 中文开源技术交流社区...
  18. web服务器遭受命令注入攻击怎么办。
  19. linux c字符串用0补位,Linux中10个你不知道的命令补齐技巧
  20. 代码随想录Day01:数组理论基础、二分查找、移除元素

热门文章

  1. 【Tensorflow】【损失函数】交叉熵数据验证(上)---CategoricalCrossentropy多分类
  2. python爬虫总结之xpath元素定位
  3. PHP递归写入MySQL无限级分类数据
  4. c语言模拟题第五套,2013年计算机二级C语言考试全真模拟试题第五套
  5. JavaWeb练习项目--JEE商城
  6. SSH项目搭建-02-配置文件
  7. 深度系统优化工具_HiBit Uninstaller卸载工具【win版】
  8. A little knowledge point every day,一起学python
  9. python实现归并排序_排序算法学习(python版本)之归并排序(MergeSort)
  10. delphi windows编程_他曾创造多门编程语言,还被比尔盖茨以300万美元挖角