这篇主要介绍下 svn 钩子的使用,svn 的安装以及配置等能够查看 svn 的使用(一)

我们能够在svn创建的仓库目录下看到 hooks 目录。

这里面就存放这个各种svn操作同一时候会运行的脚本文件。

(你能够自己查看每一个脚本文件,文件開始都有英文的介绍包含功能,參数以及返回值。
   我翻译的不好所以就採用网上其他资料的解释吧 - -! )
1.start-commit  開始提交的通知
输入參数:传递给你钩子程序的命令行參数,顺序例如以下:
    1. 版本号库路径
    2. 已经认证过的提交的username
它在提交事务产生前已执行,通经常使用来判定一个用户是否有权提交。返回0表示认证通过。

2.pre-commit 在提交结束之前提醒
输入參数:传递给你钩子程序的命令行參数。顺序是:
     1. 版本号库路径
     2. 提交事务的名称
在事务完毕提交之前执行,通常这个钩子是用来保护由于内容或位置(比如。你要求全部到一个特定分支的提交必须包含一个bug追踪的ticket号,或者是 要求日志信息不为空)而不同意的提交。

无错误返回0。

3.post-commit  成功提交的通知
传递给你钩子程序的命令行參数。顺序为:
     1. 版本号库路径
     2. 提交创建的修订版本
它在事务完毕后执行,创建一个新的修订版本号。无错误程序正常退出。
 
4.pre-revprop-change 版本号属性改动
由于Subversion的修订版本号属性不是版本号化的,对这类属性的改动(比如提交日志属性svn:log)将会永久覆盖曾经的属性值。由于数据在此可能 丢失。所以Subversion提供了这样的钩子(及与之相应的post-revprop-change),因此版本号库管理员可用一些外部方法记录变化。

作 为对丢失未版本号化属性数据的防范。Subversionclient不能远程改动修订版本号属性,除非为你的版本号库实现这个钩子。
5.post-revprop-change 版本号属性改动
这个钩子与pre-revprop-change相应。

其实,由于多疑的原因,仅仅有存在pre-revprop-change时这个脚本才会执行。当这 两个钩子都存在时。post-revprop-change在修订版本号属性被改变之后执行,通经常使用来发送包括新属性的email。版本号库传递四个參数给该 钩子:到版本号库的路径,属性存在的修订版本号。经过校验的产生变化的username,和属性自身的名字。

使用这些钩子最简单的方法就是
拷贝某个脚本,去掉.tmpl扩展名,然后自己定义钩子的内容,确定脚本是可执行的。

PS:一定要确保钩子脚本是可运行的。

并且名称就是去掉.tmpl后的名字。

另外要注意要使用SVN的钩子一定要开设权限,并且是要用执行SVN的账号进行执行这些钩子
(假设不是能够执行的会提示错误,错误代码为255。其它错误能够自行尝试。。)
我想要做的就是 用户commit 后server(測试环境的)自己主动同步 即做update操作
这里我的webserver和svnserver 在一台。(假设是远程的webserver能够在
先使用ssh命令登入

那么我们须要使用的钩子是post-commit
我们能够使用命令
cp post-commit.tmpl post-commit.tmpl.bak
mv post-commit.tmpl post-commit
(别忘了 chmod 设置为可运行的)
chmod 755 post-commit
vi post-commit
这里我们能够先做一个測试
即在文件最后加上一行
/bin/echo "commit" >> /tmp/commit.out
然后运行commit 操作 看一下 commit.out 是不是多了 commit这个单词
那么编写我们的脚本在post-commit 文件最后加入命令
/usr/bin/svn update /www/project --username m0sh1 --password m0sh1
PS:这里要 加上绝对路径 , update 后面的是checkout 下来的项目路径
假设提示错误 svn: Can't convert string from native encoding to 'UTF-8'
则须要加入一行命令
export lang = en_US.UTF-8
此时去工作文件夹看下是不是更新了。。

再举个样例,有非常多开发者为了快,往往忽略掉提交日志信息(也可能无意为之)。那么我们能够在pre-commit脚本
中做出必须提交日志信息的限制:
REPOS="$1"
TXN="$2"

# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
   grep "[a-zA-Z0-9]" > /dev/null || exit 1

# Check that the author of this commit has the rights to perform
# the commit on the files and directories being modified.
commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1

# All checks passed, so allow the commit.
exit 0
(上面内容直接就是pre-commit脚本中的内容,那么仅仅须要给pre-commit可运行的权限就能够了。)
之后我们就能够以此,类推出其他想要实现的功能了。

svn 的使用(二)相关推荐

  1. 零基础学习SVN之(二):CVS与SVN的区别

    相信大家看了零基础学习SVN之(一):SCM与SVN的使用(基础篇)这篇博客之后,对版本控制就有了一定的理解,同时也应该知道SVN与CVS是比较流行的两款SCM工具.那么到底这两款工具有什么区别呢? ...

  2. svn教程----示例二:测试人员拥有读权限

    示例二:测试人员拥有读权限 登陆测试是否有读/写权限: 清除认证缓存 有几种情况需要清除认证缓存: 1.本地使用多个账号登陆,每次输入的账号和密码都不一样 2.当账号密码修改后(建议清理)

  3. Android开发工具之Android Studio---版本控制SVN使用(二)

    1.从服务器Checkout代码到本地 Checkout入口 或者在Studio界面里 2.配置服务器地址与输入用户密码 会询问是否信任该地址,确定后,弹出用户名帐号,密码界面: 3.选择Checko ...

  4. SVN学习(二)——SVN 提交、更新、解决冲突等操作步骤

    1. 纳入版本控制 ①新建文件abc.txt ②在文件上点右键 ③添加后文件图标发生变化 2. 提交 ①使用TortoiseSVN可以提交具体某一个文件,或某一个目录下的所有改变.方法就是在想要提交的 ...

  5. SVN 学习笔记二(一口气学会SVN)

    我打算一口气讲完SVN的使用,所以,在看之前呢,请先深深的吸一口气(怎么听着像黑龙公主),当然吸完后还是要呼出来的.不要憋着了. 我们可能希望一来就直接操作.列出一堆命令.详细的命令参数等信息,我们都 ...

  6. Linux下SVN服务器支持Apache的http和svnserve独立服务器

    2019独角兽企业重金招聘Python工程师标准>>> 说明 服务器操作系统:CentOS 6.6 关闭防火墙,SElinux 实现 1.在服务器上安装配置SVN服务: 2.SVN服 ...

  7. 搭建SVN版本控制服务器

    搭建SVN版本控制服务器 一:实验目标 实战:搭建svn服务器+ apache版本控制服务器  二:实验环境                  系统版本: rhel-server-6.5-x86_64 ...

  8. svn命令行使用说明

    转帖自:http://www.svn8.com/SVNSY/20080212/117.html 0.查看帮助 命令:   svn help 1.同步(checkout)服务器数据到本地 命令:   s ...

  9. studio项目上传svn服务器,SVN在AndroidStudio中的使用(一),SVN安装配置和项目检出更新...

    由于断断续续的使用SVN,经常出现过一段时间就忘记SVN的基本操作方式,因此编写一份在AndroidStudio中使用SVN的详细教程,为自己做一个记录,便于之后的查阅. 本文主要记录如下操作. SV ...

  10. 驱动开发 - WDK 调试及 SVN 环境搭建[转]

    由于从公司辞职了,所以以前在公司里搭建的驱动开发环境也就 Game Over 了, 同样由于那环境是很久以前搭建的,自己也有很多记不清楚的地方了, 而且其中还是有很多需要注意的地方的,所以在这里顺便做 ...

最新文章

  1. 算法提高课-数学知识-矩阵乘法-AcWing 1303. 斐波那契前 n 项和:矩阵乘法,快速幂,线性代数
  2. MyEclipse解决Launching xx on MyEclipse Tomcat has encountered a problem
  3. 剑指Offer - 面试题15. 二进制中1的个数(位运算)
  4. 单片机串口通信电平不匹配的解决电路,5V 3.3V串口通讯
  5. 光驱怎么挂载第二个光驱_电脑光驱经常自己打开自己关闭,怎么回事
  6. 抓人眼球!插画风精美的网站首页设计欣赏
  7. 2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
  8. 竟还有这样的代码注释我笑喷了
  9. HTML5项目实战之旅行社网站——兼容响应式布局
  10. centeros7网络服务无法启动_Center OS7网络设置
  11. 场景法设计测试用例ATM机取款问题
  12. 【转】机器人领域的SCI期刊杂志和国际会议
  13. deepin 输出搜狗输入法ctrl shift f快捷键
  14. 中西方对时间的差异_中西方时间表达的认知差异
  15. Antd的table筛选,表头columns的filters过滤清空
  16. 立创eda学习笔记二十九:原理图转PCB
  17. 新马華人的姓名大多用方言拼音,所以显得很混乱
  18. 桂电深信服CTF之MSC真假压缩包
  19. 使用java求解根号2
  20. Android Process 'command 'C:\Users\Win\AppData\Local\Android\Sdk\build-t non-zero exit value 1错误解决方案

热门文章

  1. 一行代码开启 Winform 中的 ListView 和 DataGridView 双缓冲功能
  2. 【leetcode】Path Sum II
  3. 电商首页设计的时候,就应该考虑这个
  4. 优秀测试管理工具必备九大功能分析
  5. windows log日志分割_如何将日志记录到 Windows事件日志 中
  6. 全国计算机等级考试题库二级C操作题100套(第77套)
  7. python sqlite数据库_用Python进行SQLite数据库操作
  8. java多线程售票例子
  9. 机房内综合布线电缆的紧密捆绑有哪些问题?
  10. IDEA高级技巧:集成JIRA、UML类图插件、SSH、FTP、Database管理