通常,我会通过添加以下内容来启用扩展 .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 本身并不能解决你的问题。您明确表示您只想用善变来解决您的问题,所以答案是:你问的是不可能的。

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

如果你想巧妙地解决这个问题:

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

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

  • 用户运行一次脚本,然后他们就忘记了
  • 您可以确保如果没有运行它,他们就无法提交到您的中央存储库

其他提示

水银目前开发的版本(以被释放水银1.3 7月1日)支持的配置文件一个%include指令。

这意味着你可以请人把

%include ../common-hgrc

.hg/hgrc。已经这样做了,就可以有效地更改提交到common-hgrc控制自己的水银设置。当他们拉变化,新的设置生效。

请注意,这是很危险的:任何人谁可以让你拉变成你的资料库现在可以插入任意挂接到common-hgrc,你将执行他们在未来的Mercurial命令(即使是“安全”的命令行hg status)。

您也许能够通过 ProjRC扩展来解决这个问题。

“这一扩展使得水银寻找并解析.hg对于其他配置设置/ projrc。该文件在克隆和上拉(但从来没有上推)”

转移

什么有关创建从.hg/hgrc链接到例如customhg/hgrc以便它能够版本。然后,你需要创建一些挂钩,将其复制回.hg/hgrc - 例如之后每次更新。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top