通常,我会通过添加以下内容来启用扩展.hg/hgrc
:
[extensions]
hgext.win32text=
[encode]
** = cleverencode:
[decode]
** = cleverdecode:
但是,我希望对这个配置进行版本控制,即存储库的一部分,以便为克隆存储库的任何其他人(同事、构建机器)启用它。请注意,不应该要求克隆存储库的任何人执行任何操作来启用这些扩展。
从文档看来这是不可能的,但是有没有人知道任何可以帮助我的巧妙技巧?
通常,我会通过添加以下内容来启用扩展.hg/hgrc
:
[extensions]
hgext.win32text=
[encode]
** = cleverencode:
[decode]
** = cleverdecode:
但是,我希望对这个配置进行版本控制,即存储库的一部分,以便为克隆存储库的任何其他人(同事、构建机器)启用它。请注意,不应该要求克隆存储库的任何人执行任何操作来启用这些扩展。
从文档看来这是不可能的,但是有没有人知道任何可以帮助我的巧妙技巧?
您希望 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 本身并不能解决你的问题。你明确表示你只想要善变来解决你的问题,所以答案是:你所要求的是不可能的。
解决您的问题的唯一方法是,您的所有用户都必须至少运行/安装一次执行您想要的操作的给定脚本,例如安装正确的钩子。
如果你想聪明一点:
有点复杂,但这是我能想象到的最接近您的要求:
当前的 Mercurial 开发版本(将于 7 月 1 日作为 Mercurial 1.3 发布)%include
在其配置文件中支持指令。
这意味着你可以要求人们把
%include ../common-hgrc
进入.hg/hgrc
. 完成后,您可以通过提交更改来有效控制他们的 Mercurial 设置common-hgrc
。当他们取消更改时,新设置将生效。
请注意,这很危险:任何可以让您将更改拉入存储库的人现在都可以插入任意挂钩common-hgrc
,您将在下一个 Mercurial 命令(甚至是“安全”命令行hg status
)上执行它们。
您也许可以通过ProjRC 扩展解决这个问题。
“这个扩展使 Mercurial 可以查找并解析 .hg/projrc 以获取其他配置设置。文件在克隆和拉取时传输(但从不推送)”</p>
如何创建一个从.hg/hgrc
到的链接,例如customhg/hgrc
,以便对其进行版本控制。然后您需要创建一些将其复制回的钩子.hg/hgrc
- 例如在每次更新之后。