在subversion中,钩子是基于每个存储库编写的。每个钩子都以描述性文件名(例如预提交)写入存储库根目录中名为“hooks”的文件夹中。根据BZR文档,钩子通常是全局安装的(例如在〜/ .bazaar / plugins /目录中)。
是否可以创建一个提交给分支的预提交钩子,并且无需用户安装插件即可运行?
我在文档和一些代码讨论中看到了一个名为“分支钩子”的引用,这听起来很有希望。
我找到了这个博客:http://schettino72.wordpress.com/2008/01/20/how-to-execute-tests-on-a-bazaar-pre-commit-hook/,引用了:
“集市上的插件不是项目 具体。所以你无法控制哪个 您的插件将项目(分支) 适用(它将适用于 全部)“。
这不太有希望。该博客提供了一种解决方法,您可以编写并安装一个插件,该插件可以在存储库中调用挂钩(如果存在)。理想情况下,我不想依赖用户安装插件来运行一个非常基本的挂钩,即一个简单的测试。这可能吗?
答案 0 :(得分:2)
您可以使用bazaar服务器并在其上安装挂钩。
您也可以找到感兴趣的下一个链接:
http://people.samba.org/bzr/jelmer/bzr-shell-hooks/trunk/
http://bazaar.launchpad.net/~stianse/%2Bjunk/bzr-shell-hooks/
答案 1 :(得分:2)
我对此进行了一些研究,并发现在分布式修订控制系统中缺少特定于分支的钩子背后的动机。我将Subversion与集中式RCS进行了比较,作为所需功能的一个例子。
GIT和Mercurial是分布式RCS(如Bazaar),它们具有钩子工具,包括分支特定钩子和全局钩子的不同方法。无论如何,钩子不受版本控制,并且由于安全风险,它们需要分支的用户启用它们。在Mercurial documentation on hooks的标题为“挂钩与安全”的部分下,它说:
在Mercurial中,钩子不是修订版 控制,不要传播的时候 您从存储库克隆或拉取。 原因很简单:一个钩子 是完全随意的 可执行代码。它运行在你的 用户身份,享有您的特权 等级,在你的机器上。
任何人都会非常鲁莽 分布式修订控制系统 实现修订控制的钩子, 因为这会很容易 可剥削的方式颠覆了 修订版用户的帐户 控制系统。
在集中式RCS中,如Subversion,钩子在存储库服务器上运行,因此用户权限和服务器设置限制了破坏性钩子脚本的影响。在分布式RCS中,挂钩通常在用户的本地计算机上运行,这是有风险的。
正如vitaly.v.ch所提到的,可以设置一个Bazaar服务器来在推送和拉出时运行挂钩。但是,预提交挂钩没有意义,因为提交发生在用户的机器上。这将更像是一个预推钩。
Bazaar具有钩子所需的所有功能,但由于它们带来的安全风险,需要单独的用户配置来安装和启用它们。
答案 2 :(得分:1)
不,您的用户必须安装插件才能激活您的挂钩。