8

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

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

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

从文档看来这是不可能的,但是有没有人知道任何可以帮助我的巧妙技巧?

4

4 回答 4

10

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

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 或用户
  • 确保钩子一旦安装,就可以更新脚本以将配置更新分发给用户
  • 使钩子添加一些特殊标记以提交消息
  • 拒绝不携带特殊消息的中央存储库提交

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

  • 用户运行一次脚本,他们忘记了
  • 你可以确保如果没有运行它,他们就不能提交到你的中央仓库
于 2009-05-13T08:09:58.613 回答
6

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

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

%include ../common-hgrc

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

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

于 2009-05-22T09:40:25.823 回答
1

您也许可以通过ProjRC 扩展解决这个问题。

“这个扩展使 Mercurial 可以查找并解析 .hg/projrc 以获取其他配置设置。文件在克隆和拉取时传输(但从不推送)”</p>

于 2012-07-02T09:46:43.120 回答
0

如何创建一个从.hg/hgrc到的链接,例如customhg/hgrc,以便对其进行版本控制。然后您需要创建一些将其复制回的钩子.hg/hgrc- 例如在每次更新之后。

于 2009-05-13T07:23:52.090 回答