先看一下转载的文章:
来自:http://blog.csdn.net/deepwishly/archive/2010/03/10/5366757.aspx
使用 hook ,为了方便管理员 控制提交的过程 Subversion 提供了 hook 机制。当特定的 事件发生时,相应的 hook 会被调用, hook 其实就相当于特定 事件的处理函数。每个 hook 会得到与它所处理的事件相关的参数,根据 hook 的 返回值, Subversion 会决定是否继续当前的提交过程。
当前 Subversion 提 供了 5 种可以安装的 hook :
事 件名
|
时 机
|
与 hook 交 互
|
一 般用途
|
start-commit
|
事务创建之前。
|
传给 hook 的 参数:
- 参 数 1 , 代码库路径。
- 参 数 2 , 试图提交的用户名。
hook 的返回值:非 0 则 终止。
|
判断用户是否有权限进行提交 操作。
|
pre-commit
|
事务完成,但未提交。
|
- 参 数 1 , 代码库路径。
- 参 数 2 , 事务名。
hook 的返回值:非 0 则 终止提交,操作回滚。
|
对提交内容进行检查。如要求 提交必须填写提交信息。
|
post-commit
|
事务提交完毕,新的修订版被 创建。
|
传给 hook 的 参数:
- 参 数 1 , 代码库路径。
- 参 数 2 , 刚创建的修订版号。
hook 的返回值被忽 略。
|
发送邮件通知,或备份代码 库。
|
pre-revprop-change
|
修改修订版属性(如提交时提 供的信息 message )之前。
由于修订版属性一旦修改就会 永久的丢失,除非安装这个事件的 hook , subversion 的 客户端不允许远程修改修订版属性。
|
传给 hook 的 参数:
- 参 数 1 , 代码库路径。
- 参 数 2 , 要修改的修订版号。
- 参 数 3 , 操作用户名。
- 要 修改的属性。
hook 的返回值:非 0 则 终止。
|
保存修订版属性的改变记录。
|
post-revprop-change
|
修订版属性值被修改之后。
如果没有安装 pre-revprop-change 的 hook , 这个事件的 hook 不会被执行。
|
传给 hook 的 参数:
- 参 数 1 , 代码库路径。
- 参 数 2 , 要修改的修订版号。
- 参 数 3 , 操作用户名。
- 要 修改的属性。
hook 的返回值被忽 略。
|
发送邮件通知。
|
hook 只有安装之后才 会被执行,在 Subversion 中这一过程相当简单。只需将 hook 放 在代码库目录的 hooks 子目录下即可。为了能顺利地找到它们, Subversion 规 定 hook 的 命名与上表的事件名同名,如 pre-commit 的 hook 名就是 pre-commit (请 确保它是可执行的,在 windows 平台下需要添加对应的扩展名,如 bat 、 exe 、 com 。)。 创建代码库之后, Subversion 会创建对应的这 5 个事件的 hook 模 版。选取所需的模版,然后将其改名,在修改内容。这样hook 就可以工作了,当 然请先确保 hook 本身能正常的执行。
hook 的编写非常简 单,通常的做法:
- 法 1 : 使用所在平台的脚本语言,如 unix 下的 shell ,或 windows/dos 的 批处理命令。
- 法 2 : 使用相关的语言,如 c 。
- 法 3 : 使用脚本语言,如 python 或 perl 等实现主体。然后 通过法 1 来调用。
- 法 4 : 使用相关的语言实现主体,然后通过法 1 来调用。
这里给出在 windows 下 使用 bat 的例子,它实现了 pre-commit hook 主 要作用是检查提交内容中是否包含说明信息,如果没有就放弃:
set REPOS=%1
set TXN=%2
set SVNLOOK="D:\Program Files\Subversion\bin\SVNLOOK.exe"
rem 此处不太严格, 因为把空格也算了
FOR /F "usebackq delims==" %%i IN (`%%SVNLOOK%% log -t %TXN% %REPOS%`) DO exit 0
exit 1
|
由于平台的脚本系统功能毕竟 有限( unix 下的不太清楚,不过批命令就太差了),建议采用方法 2 、 3 和 4 。 从简易性方面的考虑,推荐方法 3 。因为象 python 就已经提供了 一些常用的功能,如发送邮件。
最后,就是 subversion 以 正在存取代码库的过程的所属用户来执行 hook 。因此,请确保这个用户具有足够的权限,可以访问 hook 可 以直接或间接访问的资源。
实际的环境是LINUX环境,复制一份post_commit.tmpl,为 post_commit ,更改权限为可运行,或者为0777权限,
编辑post_commit文件,增加一下代码:
/usr/bin/svn update /项目测试环境路径 --username=user --password=password --non-interactive
比如 : /usr/bin/svn update /var/www --username=user --password=password --non-interactive
如果出现中文乱码的情况,先设置编码
export=zh_CN.UTF-8
运行一些脚本测试是否有错误,如果没错误可以进行提交测试。
另外如果出现
Commit failed (details follow):
MERGE of 'xxx': 200 OK (xxx)
Finished!
错误,这个主要是脚本出错。检查脚本即可。
/usr/bin/svn update /var/www --username=user --password=password --non-interactive
export=zh_CN.UTF-8
分享到:
相关推荐
另一方面,"svn_vss_backup"可能是另一个与SVN相关的脚本或工具,名字暗示它可能涉及到将SVN仓库与Visual SourceSafe(VSS)集成的备份过程。VSS是微软提供的一种早期版本控制系统,一些组织可能需要将VSS数据迁移到...
本脚本可在一台Windows...备份服务器拥有与源服务器完全一样的仓库、代码结构、提交历史,当生产服务器数据损坏时,可以通过复制仓库目录的方式恢复源服务器中数据,也可以立即把备份服务器转为生产服务器投入使用。
本文将详细介绍如何在Windows和Linux环境下,利用脚本实现SVN仓库的自动化全备份与增量备份,并进行异地备份。 【描述】: Windows下的自动化备份通常涉及编写批处理脚本,结合任务计划程序来定时运行。这个过程...
在本文中,我们将深入探讨如何在Linux系统上进行svn仓库的备份与同步。 首先,要在机器B上创建一个新的svn仓库,你需要在指定目录下使用`mkdir`命令创建一个目录,例如 `/svn`,然后使用`svnadmin create`命令创建...
然而,WordPress官方插件库使用的是SVN,这就需要我们找到一种方式将本地的Git仓库与WordPress SVN仓库同步。为了实现“零配置”同步,我们可以借助`git-svn`工具,这是一个Git子命令,它提供了与SVN服务器交互的...
通过以上步骤,我们可以在 Linux 系统下实现 SVN 仓库的异地同步增量备份。这种方式不仅可以减少备份所需的时间和网络流量,还可以提高数据的安全性。在实际部署过程中,根据具体的业务需求调整定时同步策略,确保...
当开发团队分布在不同的地理位置,且出于安全原因无法直接访问同一SVN仓库时,实现仓库间的双向同步就显得尤为必要。SVN虽然原生支持单向的仓库镜像,但不直接支持双向同步。面对这种情况,我们可以采取手动操作的...
SVN自动更新功能允许用户定期从服务器获取最新的项目代码,确保本地工作副本与远程仓库同步。这在多个人协作的团队中尤其重要,因为其他人可能随时在服务器上进行提交。脚本通过执行`svn update`命令实现这一功能,...
2. **自动获取代码**:利用脚本(通常为bash、Python或Windows批处理脚本)定期检查 SVN 仓库的更新,当有新的提交时,自动将代码拉取到本地。这一步通常被称为“拉取”或“更新”,它确保开发人员始终拥有最新的源...
- **IDE集成**:可以与Visual Studio、Eclipse等集成,直接在开发环境中使用SVN功能。 - **版本控制与其他工具的协同**:例如与Bug跟踪系统JIRA、持续集成工具Jenkins的配合,实现更高效的开发流程。 通过以上介绍...
本文将指导读者在 Linux 环境下安装 SVN(Subversion),并使用钩子脚本实现本地提交后自动同步代码文件到服务器的网站目录下。 安装 SVN 首先,使用 yum 命令安装 SVN: `yum install subversion` 安装完成后,...
完成以上准备后,可以使用`svnsync`工具将远程SVN仓库同步到本地备份目录中。`svnsync`是一个用于在两个SVN仓库之间复制数据的工具,它可以实现增量同步,即只同步自上次同步以来发生改变的数据。 **操作命令**: 1...
在多人协作的开发环境中,SVN能够帮助团队成员追踪和控制文件的变化,确保代码的一致性和完整性。以下是关于SVN及其使用的详细教程: 一、SVN安装 1. 下载安装包:首先,你需要根据你的操作系统(Windows、Linux或...
本文将深入探讨如何在Linux环境下利用shell脚本实现SVN双机热备份,确保服务高可用性和数据安全性。 首先,我们需要理解"双机热备份"的概念。双机热备份是指两台服务器同时运行,一台为主服务器,另一台为备用...
它能够帮助用户实现从一个SVN仓库到另一个SVN仓库的数据复制,这对于需要在多个服务器之间共享代码或数据的团队来说非常有用。SVNsync不仅支持增量同步,还能够在不中断服务的情况下进行数据迁移。 #### 二、SVN...
总结来说,该脚本实现了从SVN到GitLab的代码库迁移,并自动化了一些繁琐的操作,如权限设置、版本范围迁移、远程仓库配置和同步更新。在Ubuntu系统上,通过修改脚本的权限并执行它,能够快速完成迁移工作。 需要...
5. **钩子(Hooks)**:服务器端的脚本,可以在提交、更新等操作前后执行自定义任务,如自动化测试、代码质量检查等。 **使用SVN的益处** 1. **团队协作**:SVN让多人同时工作在一个项目上成为可能,减少了重复劳动...
SVN的hooks功能还可以在服务器端设置脚本,自动执行检查,如代码格式检查或自动化测试,确保提交的质量。 在团队协作中,SVN工具与其他工具的集成也至关重要。例如,它可以与IDE(如Eclipse、IntelliJ IDEA)无缝...
标题和描述中提到的“自动获取svn代码并且编译发布”是一种常见的持续集成(CI)实践,它涉及自动化从版本控制系统获取源代码、构建应用程序、并进行发布的过程。以下是这个流程涉及的关键知识点: 1. **Subversion ...