我可以通过编程方式设置Mercurial配置选项吗?

我可以通过编程方式设置Mercurial配置选项吗?,mercurial,config,hgrc,Mercurial,Config,Hgrc,我正在寻找一种在不实际编辑文本文件的情况下设置.hgrc配置项的方法。我正在尝试跨多个开发人员标准化hgrc的设置,我想要一个如下命令 hg --config ui.username=foo 但这也会将配置更改保存到hgrc文件中 这似乎应该是vanilla hg命令中直接支持的内容,但我在任何地方都找不到它。此表单: hg --config ui.username=foo 没有保存任何东西。它仅为一次运行设置值 如果有帮助,您也可以使用/etc/mercurial/hgrc进行系统范围的设

我正在寻找一种在不实际编辑文本文件的情况下设置
.hgrc
配置项的方法。我正在尝试跨多个开发人员标准化
hgrc
的设置,我想要一个如下命令

hg --config ui.username=foo
但这也会将配置更改保存到
hgrc
文件中

这似乎应该是vanilla hg命令中直接支持的内容,但我在任何地方都找不到它。

此表单:

hg --config ui.username=foo
没有保存任何东西。它仅为一次运行设置值

如果有帮助,您也可以使用
/etc/mercurial/hgrc
进行系统范围的设置。

如果您希望保存配置更改,则您或mercurial必须编辑配置文件:-)

如果你能打电话给Mercurial

hg --config ui.username=foo
那么你也应该能够做到

echo '[ui]' >> ~/.hgrc
echo 'username = foo' >> ~/.hgrc
这将保存配置更改,而不管
~/.hgrc
文件的外观如何(可以有多个
[ui]
部分)


Mercurial 3.0及更高版本具有打开带有用户配置文件的编辑器的功能。仍然不完全符合您的要求,但至少这样可以更轻松地以交互方式编辑文件。

有一个扩展名可以帮助您做到这一点

之后,你可以做这样的事情

% hg showconfig paths
paths.default=ssh://hg@bitbucket.org/alu/hgconfig
% hg config paths.upstream $(hg showconfig paths.default)
% hg config paths.default $(hg showconfig paths.default | sed 's|/alu/|/nassrat/|')
% hg showconfig paths
paths.default=ssh://hg@bitbucket.org/nassrat/hgconfig
paths.upstream=ssh://hg@bitbucket.org/alu/hgconfig

唯一的问题是这会覆盖内置的config命令,您可以调整代码来更改命令名,也可以使用它。幸运的是,如果您的用例只是简单地设置和获取特定的配置,或者运行hg的进程没有“~”或HOME dir,或者它是作为系统/守护进程用户运行的,并且有一个您无法写入的“~”dir,那么这可能无关紧要::~(@Garen:您始终可以设置
HGRCPATH
以覆盖Mercurial查找配置文件的位置。这对于您的用户来说应该很方便。某些流行的CI系统(例如TeamCity)没有办法做到这一点。文档也是完全错误的——例如,hg不检查文档中的系统范围位置,如C:\Mercurial,而且我从来没有能够让它读取公布的注册表位置。在Linux上,当您的构建发生在chroot中时,可能会变得很困难,因为在chroot中,您对环境的影响可能有限配置设置,没有homedir等。我可以继续说下去,重点是如果Mercurial允许我们在命令行上指定配置文件路径,那么就很容易绕过它们。:)@Garen:我很惊讶在
hg help config
中找到了对
C:\Mercurial\Mercurial.ini
的引用-该文件自1.8版以来就没有被读取过。该文档现在已经为即将发布的Mercurial 2.2.2版本进行了更新。@Garen:这似乎是git--config功能的一个糟糕的替代品。将您的配置回显到文件的nd损害了连续性和结构,充其量会覆盖现有的配置元素(而不是“就地”替换或追加它们)。