0

在颠覆中,钩子是在每个存储库的基础上编写的。每个钩子都以描述性文件名(例如预提交)写入存储库根目录下名为“hooks”的文件夹中。根据 BZR 文档,挂钩通常是全局安装的(例如,在 ~/.bazaar/plugins/ 目录中)。

是否可以创建一个预提交挂钩,该挂钩已提交到分支并且无需用户安装插件即可运行?

我在文档和一些代码讨论中看到了对“分支钩子”的引用,这听起来很有希望。

我发现了这个博客:http ://schettino72.wordpress.com/2008/01/20/how-to-execute-tests-on-a-bazaar-pre-commit-hook/ ,其中引用:

“集市中的插件不是特定于项目的。因此您无法控制您的插件将应用于哪些项目(分支)(它将应用于所有项目)。”

这是不太有希望的。该博客提供了一种解决方法,您可以编写并安装一个插件,该插件会在存储库中调用钩子(如果存在)。理想情况下,我不想依赖用户安装插件来运行一个真正基本的钩子,即一个简单的测试。这可能吗?

4

3 回答 3

2

我对此进行了一些研究,发现分布式修订控制系统中缺乏特定于分支的钩子背后的动机。我曾将集中式 RCS 与 Subversion 进行比较,作为所需功能的示例。

GIT 和 Mercurial 是具有挂钩工具的分布式 RCS(如 Bazaar),包括针对特定分支的挂钩和全局挂钩的不同方法。无论如何,这些钩子不受修订控制,并且由于存在安全风险,它们需要分支的用户启用它们。在有关 hooks 的 Mercurial 文档中,在标题为“Hooks and security”的部分下,它说:

在 Mercurial 中,挂钩不受修订控制,并且不会在您克隆或从存储库中提取时传播。原因很简单:钩子是一段完全任意的可执行代码。它以您的用户身份在您的机器上以您的权限级别运行。

任何分布式修订控制系统实施修订控制钩子都是非常鲁莽的,因为这将提供一种易于利用的方式来破坏修订控制系统用户的帐户。

在像 Subversion 这样的集中式 RCS 中,挂钩在存储库服务器上运行,因此用户权限和服务器设置限制了破坏性挂钩脚本的影响。在分布式 RCS 中,钩子通常在用户的本地机器上运行,这是有风险的。

正如vitally.v.ch 提到的,Bazaar 服务器可以设置为在推入和拉出时运行挂钩。但是预提交钩子没有意义,因为提交发生在用户的机器上。那么它更像是一个预推钩。

Bazaar 具有钩子所需的所有功能,但由于它们带来的安全风险,需要单独的用户配置才能安装和启用它们。

于 2010-03-06T21:16:46.360 回答
2

您可以使用集市服务器并在其上安装挂钩。

您还可以找到感兴趣的下一个链接:

http://people.samba.org/bzr/jelmer/bzr-shell-hooks/trunk/

http://bazaar.launchpad.net/~stianse/%2Bjunk/bzr-shell-hooks/

于 2010-03-04T16:54:01.207 回答
1

不,您的用户必须安装插件才能激活您的钩子。

于 2010-02-24T22:29:07.633 回答