Mercurial中的版本控制扩展配置

时间:2009-05-13 07:18:46

标签: version-control configuration mercurial dvcs mercurial-extension

通常,我会通过将以下内容添加到.hg/hgrc来启用扩展程序:

[extensions]
hgext.win32text=
[encode]
** = cleverencode:
[decode]
** = cleverdecode:

但是,我希望对此配置进行版本控制,即存储库的一部分,以便为其他任何人(同事,构建计算机)克隆存储库启用它。请注意,无论何时克隆存储库,都不应要求任何来启用这些扩展。

似乎不可能来自the documentation,但有没有人知道任何可以帮助我的巧妙技巧?

4 个答案:

答案 0 :(得分:9)

您希望mercurial在克隆repo时自动执行某些操作(更新挂钩或配置)。 Documentation说这是不可能的,并给出了一些很好的理由:

Hooks do not propagate

In Mercurial, hooks are not revision controlled, and do not propagate when you clone,
or pull from, a repository. The reason for this is simple: a hook is a completely    
arbitrary piece of executable code. It runs under your user identity, with your 
privilege level, on your machine. No comments

It would be extremely reckless for any distributed revision control system to 
implement revision-controlled hooks, as this would offer an easily exploitable way to 
subvert the accounts of users of the revision control system. No comments

很明显,mercurial本身不会解决你的问题。你明确表示你只想要解决你的问题,所以答案是:你所要求的是不可能的。

解决问题的唯一方法是,所有用户必须至少运行/安装一次执行所需操作的给定脚本,例如安装正确的挂钩。

如果你想聪明一点:

  • 创建一个要运行的一次性脚本,将安装一个钩子将正确的配置复制到.hg或用户
  • 确保挂钩一旦安装,就可以更新脚本以将配置更新分发给用户
  • 使钩子添加一些特殊标记来提交消息
  • 拒绝不带有特殊消息的中央存储库提交

有点复杂,但这是我能想象到的最接近你的要求:

  • 用户运行一次脚本并忘记
  • 你可以确保如果没有运行它,他们就无法提交你的核心仓库

答案 1 :(得分:6)

Mercurial的当前开发版本(将于7月1日作为Mercurial 1.3发布)在其配置文件中支持%include指令。

这意味着你可以要求人们放

%include ../common-hgrc

进入.hg/hgrc。完成后,您可以通过将更改提交到common-hgrc来有效地控制其Mercurial设置。当他们提取更改时,新设置将生效。

请注意,这很危险:任何可以让您将更改提取到存储库的人现在可以将任意挂钩插入common-hgrc,然后您将在下一个Mercurial命令(甚至是“安全”命令)上执行它们行hg status)。

答案 2 :(得分:1)

您可以通过ProjRC extension解决该问题。

“此扩展程序使Mercurial查找并解析.hg / projrc以获取其他配置设置。该文件在克隆和拉取时传输(但从不在推送时)“

答案 3 :(得分:0)

如何创建从.hg/hgrc到例如customhg/hgrc的链接.hg/hgrc以便版本化。然后你需要创建一个钩子,将其复制回{{1}} - 例如每次更新后。