jasmine214--love

只有当你的内心总是充满快乐、美好的愿望和宁静时,你才能拥有强壮的体魄和明朗、快乐或者宁静的面容。
posts - 731, comments - 60, trackbacks - 0, articles - 0

理解钩子脚本

Posted on 2010-10-14 11:03 幻海蓝梦 阅读(730) 评论(0)  编辑  收藏 所属分类: 版本管理

无论你用什么协议访问你的版本库,都至少需要创建一个版本库,这可以使用Subversion命令行客户端或TortoiseSVN完成。

如果你还没有创建Subversion版本库,是时间开始了。

4.1. 创建版本库

你可以使用FSFS或较老但更稳定的Berkeley Database(BDB)作为版本库的后端,FSFS格式更快一点,而且可以正常运行在Windows 98,BDB格式更加的稳定,因为其经过了更长时间的验证。《使用Subversion进行版本控制》中的第5章, 版本库数据存储有更多细节。

4.1.1. 使用命令行工具创建版本库

  1. 创建一个名为SVN(例如D:\SVN\)的空文件夹,作为你的所有版本库的根。
  2. D:\SVN\里创建另一个目录MyNewRepository
  3. 打开命令行窗口(或DOS窗口),进入D:\SVN\目录,输入

    svnadmin create --fs-type bdb MyNewRepository

    svnadmin create --fs-type fsfs MyNewRepository

现在你在D:\SVN\MyNewRepository创建了一个新的版本库。

4.1.2. 使用TortoiseSVN创建版本库

图 4.1. 未版本控制文件夹的TortoiseSVN菜单

未版本控制文件夹的TortoiseSVN菜单

  1. 打开资源管理器
  2. 创建一个新的文件夹,命名为SVNRepository
  3. 右键点击新创建的目录,选择TortoiseSVN在此创建版本库...

    然后就会在新文件夹创建一个版本库,不要手工编辑这些文件!!!如果你得到什么警告,一定要先确定目录非空并且没有写保护。

4.1.3. 本地访问版本库

为了访问本地版本库,你需要这个文件夹的路径,只要记住Subversion期望所有的版本库路径使用的形式为file:///C:/SVNRepository/,请注意全部使用的是斜杠。

为了访问网络共享中的版本库,你可以使用驱动器影射或使用UNC路径,对于UNC路径,形式为file://ServerName/path/to/repos/,请注意这里前面只有两个斜杠。

在SVN 1.2之前,UNC路径曾经是一种非常晦涩的格式file:///\ServerName/path/to/repos,这种格式依然支持,但不推荐。

[警告] 警告
不要创建和访问网络共享上的Berkeley DB版本库,它不能存在于一个远程的文件系统,即使是影射到盘符的共享。如果你希望在网络共享使用Berkeley DB,结果难以预料-你可能会立刻看到奇怪的错误,也有可能几个月之后才发现数据库已经损坏了。
[提示] 提示
如果你需要访问网络共享中的版本库,请使用fsfs格式创建版本库,如果也希望提供服务器访问,你需要1.1或更高版本的Subversion服务器。

4.2. 版本库备份

无论你使用何种版本库,定期维护和验证版本库备份非常重要,或许你可以访问最近版本的文件,但是如果没有版本库,所有的历史将会丢失。

最简单(但不推荐)的方法是拷贝整个版本库目录到备份介质,然而你必须绝对确定没有访问数据的进程,在这里“访问”的意思是任何访问,一个BDB版本库即使在访问看起来只需要读时也会有写操作,如果在拷贝时版本库被访问了(web浏览器,WebSVN等等),备份将毫无价值。

推荐的方法是运行

svnadmin hotcopy path/to/repository path/to/backup --clean-logs

,用一种安全的方式创建版本库的拷贝,备份是一个拷贝,--clean-logs选项并不必须,但是通过删除BDB版本库中多余的日志文件可以节省一些空间。

svnadmin在安装Subversion命令行客户端时会自动安装,如果你在Windows PC上安装这个命令行工具,最好的方式是下载Windows安装版本,它比.zip版本的压缩效率更好,所以更小,并且小心的为你设定路径。你可以从http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91下载最新版本的命令行客户端。

4.3. 钩子脚本

钩子脚本是被版本库事件触发的程序,例如新修订版本的创建或未版本化属性的修改。每一种钩子都会被告知事件的足够信息,操作的目标,触发事件的用户名。依赖于钩子的输出或返回状态,钩子程序可以继续执行,停止或以某种方式挂起。请参阅《使用Subversion进行版本控制》的Hook Scripts部分来查看关于钩子实现的细节。

版本库的hooks目录中有一些钩子的例子脚本,这些例子脚本适合于Unix/Linux服务器,在Windows下需要修改。钩子可以是批处理文件或可执行文件,下面是用来实现pre-revprop-change钩子的例子。

rem Only allow log messages to be changed. if "%4" == "svn:log" exit 0 echo Property '%4' cannot be changed >&2 exit 1

请注意所有发送到标准输出的东西都会被忽略,如果你希望信息出现在拒绝提交对话框中,你需要将这些信息发送到标准错误,在一个批处理文件中使用>&2实现。

4.4. 检出链接

如果你希望你的Subversion版本库对于别人可用,你可以在你的站点包含一个链接。为了让这些更加容易访问,你可以为其他TSVN用户包含一个检出链接

当你安装了TortoiseSVN,它会注册一个tsvn:协议,当TSVN用户点击这样一个链接,检出窗口会自动弹出,且版本库URL已经填入。

为了在你自己的网页上包含这样一个链接,你需要添加类似下面的代码:

<a href="tsvn:https://tortoisesvn.tigris.org/svn/tortoisesvn/trunk"></a>

当然,如果你提供一个合适的图片会更好,你可以使用TortoiseSVN logo,也可以使用自己的图片。

<a href="tsvn:https://tortoisesvn.tigris.org/svn/tortoisesvn/trunk"> <img src=TortoiseCheckout.png></a>


只有注册用户登录后才能发表评论。


网站导航: