2010-02-20 55 views
0

在Subversion中,挂钩是以每个存储库为基础编写的。每个钩子都以描述性文件名(例如预先提交)写入存储库根目录中名为“钩子”的文件夹中。根据BZR文档,钩子通常全局安装(例如在〜/ .bazaar/plugins /目录中)。如何在BZR中编写特定于分支的钩子?

是否有可能创建提交给分支的预提交钩子,并且在用户不需要安装插件的情况下运行?

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

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

“在商场的插件没有项目的具体 让你在其中(分公司)的插件将 应用无法控制 项目(它会全部适用于 )。“

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

回答

1

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

2

我做了一些研究,发现这个背后缺乏分布式版本控制系统的特定分支挂钩的动机。作为所需功能的一个例子,我将它与作为集中式RCS的Subversion进行了比较。

GIT和Mercurial是分布式的RCS(如Bazaar),它们具有钩子工具,包括针对分支特定钩子和全局钩子的不同方法。无论如何,挂钩不受版本控制,并且由于安全风险,它们要求分支的用户启用它们。在Mercurial documentation on hooks,在标题为“钩和安全性,”它说:

在水银,钩不可控修订 和 你克隆不传播时,或从一个仓库拉。 其原因很简单:挂钩 是完全任意的 可执行代码。它在您的计算机上以您的 用户身份运行,您的权限级别为 。

这将是任何 分布式版本控制系统 极其鲁莽实施修订控制挂钩, 因为这将提供一个容易利用的 方式颠覆了 账户修订 控制系统的用户。

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

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

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