Version control Mercurial中的版本控制扩展配置

Version control Mercurial中的版本控制扩展配置,version-control,configuration,mercurial,dvcs,mercurial-extension,Version Control,Configuration,Mercurial,Dvcs,Mercurial Extension,通常,我会通过在.hg/hgrc中添加以下内容来启用扩展: [extensions] hgext.win32text= [encode] ** = cleverencode: [decode] ** = cleverdecode: 但是,我希望对该配置进行版本控制,即存储库的一部分,以便为克隆存储库的任何其他人(同事、构建机器)启用该配置。请注意,克隆存储库的人不需要做任何事情来启用这些扩展 看起来这不可能,但有人知道有什么巧妙的技巧可以帮助我吗?如何创建一个从.hg/hgrc到例如custo

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

[extensions]
hgext.win32text=
[encode]
** = cleverencode:
[decode]
** = cleverdecode:
但是,我希望对该配置进行版本控制,即存储库的一部分,以便为克隆存储库的任何其他人(同事、构建机器)启用该配置。请注意,克隆存储库的人不需要做任何事情来启用这些扩展


看起来这不可能,但有人知道有什么巧妙的技巧可以帮助我吗?

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

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

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或用户中
  • 确保钩子一旦安装,就可以更新脚本以将配置更新分发给用户
  • 让钩子添加一些特殊的标记来提交消息
  • 拒绝在中央存储库中提交不包含特殊消息的内容
有点复杂,但这是我能想象到的最接近您要求的:

  • 用户运行脚本一次,他们就会忘记
  • 您可以确保,如果客户没有运行它,他们就无法提交您的中央回购协议

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

这意味着你可以要求人们

%include ../common-hgrc
进入
.hg/hgrc
。这样,您就可以通过将更改提交到
common hgrc
来有效地控制它们的Mercurial设置。当他们拉动更改时,新设置将生效


请注意,这是危险的:任何能够让您将更改拉入存储库的人现在都可以将任意钩子插入到
common hgrc
中,您将在下一个Mercurial命令中执行它们(即使是“安全”命令行
hg status
)。

您可能可以通过


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

它需要完全自动,我不想定期登录每个构建从属服务器来创建
.hg/hgrc
链接。我认为mercurial支持链接。因此,如果您在中选中customhg/hgrc,而它指向.hg/hgrc,应该可以工作。链接创建本身不是自动的。因此,您要求用户执行作者不希望执行的特定操作。是的,特殊构建脚本或通用构建服务器配置是次优解决方案。我只是希望HG中有一些不容易发现的功能“文件上说这是不可能的,并给出了一些很好的理由。”它在哪里这样说?听起来像是我想读的东西。我喜欢这种变通方法。在repos中包含一个将%include行附加到.hg/hgrc的小脚本是很简单的