Mercurial条件%include?
我希望项目的父目录包含一个hgrc文件,该文件夹中的repo从中继承,例如Mercurial条件%include?,mercurial,hgrc,Mercurial,Hgrc,我希望项目的父目录包含一个hgrc文件,该文件夹中的repo从中继承,例如 ~/work/ ~/work/hgrc ~/work/project1/ ~/work/project2/ ~/personal/hgrc ~/personal/project1 ~/personal/project2 ~/personal/project3 工作中的任何项目都应该继承自work/hgrc,个人中的任何项目都应该继承自personal/hgrc。我想在~/.hgrc中添加一个脚本,在克隆时搜索父目录中的
~/work/
~/work/hgrc
~/work/project1/
~/work/project2/
~/personal/hgrc
~/personal/project1
~/personal/project2
~/personal/project3
工作中的任何项目都应该继承自work/hgrc
,个人中的任何项目都应该继承自personal/hgrc
。我想在~/.hgrc
中添加一个脚本,在克隆时搜索父目录中的任何hgrc文件,如果它们存在,%include
则包含它们,但这有一点很难看,即如果在克隆后在其下方添加hgrc,它将不会被包含。只有5%的时间考虑,但仍然…把:
%include ../hgrc
每个回购协议的内部。hg/hgrc?您甚至可以自动执行此操作,但将其放入您的系统范围/etc/mercurial/hgrc
:
[hooks]
post-clone = echo '%include ../hgrc' >> .hg/hgrc
我还没有测试过那个钩子 根据@Ry4an的建议,这里有一个对我有用的例子。我把它添加到我的
~/.hgrc
文件中,这样它就可以在任何地方工作
[hooks]
# This hook adds "%include ../.hgrc" to .hg/hgrc if the .hgrc file exists in
# the top level. This allows one to store a set of paths for example.
# See
update = if [ -e .hgrc ] && touch .hg/hgrc \
&& ! grep -q '%include \.\./\.hgrc' .hg/hgrc; then \
echo '%include ../.hgrc' >> .hg/hgrc; \
fi
如果repo的顶层存在文件
.hgrc
,则此钩子会将行%include../.hgrc
添加到.hg/hgrc
文件中。请注意,通过使用update
钩子,我们绕过了post clone
clone钩子的问题,即必须尝试从环境变量中找出目标克隆的目录名。如果它不起作用,我将调整它,但它看起来基本上是正确的,但是,如果../hgrc不存在,我如何防止它添加include(或者%包含不存在的文件是否安全?)。我将等待一段时间,寻找一种在不改变hgrc文件的情况下实现这一点的方法(这样它可以处理创建一个较低的hgrc,如果它还不存在的话),但是如果我在一周左右没有听到任何消息,我会将你的消息标记为答案;然后回显“%include../hgrc'>>.hg/hgrc
,但我需要能够指向克隆目录的名称。也就是说,如果我运行hg clone proj1 proj2
,我需要用proj2/
@Jonathan预先编写.hg/hgrc
:尝试一下环境变量,它提供克隆源,如果显式地给clone
命令,则提供其目标。此信息应足以获取所需的目标前缀。如果文件不存在,则创建该文件的常用习惯用法为:touch../hgrc;回声“%include../hgrc'>>.hg/hgrc
。但是,如果您缺少对父目录的写访问权限,则会出现异常。如果您改用更新
挂钩,则您将已经位于正确的目录中。