我喜欢在Mercurial中创建命名分支来处理可能需要一段时间才能编写代码的功能,因此当我按下hg push -r default
时,要确保只将更改推送到默认分支。但是,每次执行推入或传出命令时都必须记住-r default
,这很痛苦。
所以我尝试通过将此配置添加到我的〜/ .hgrc中来解决此问题:
[defaults]
push = push -r default
outgoing = outgoing -r default
问题是,这些配置行不是真正的默认值,它们是别名。它们会按预期工作,直到我尝试执行hg push -r <some revision>
。我设置的“默认”仅消除了我传入的修订。(我看到defaults are deprecated,但是别名也有同样的问题)。
我曾尝试环顾四周,但找不到任何可以设置默认分支以进行推送并允许我在必要时覆盖它的东西。有人知道我还能做些什么吗?
ps:我确实意识到我可以为每个分支有单独的克隆,但是我不想这样做。不得不切换目录很烦人,尤其是当您拥有共享的配置或编辑器工作区时。
我不认为您可以用纯净的水银来做,因为它只有一个只有树枝的克隆(在您说那不是你的杯茶之前,我一直在建议这样做)。如果确实要杀死您,则可以创建一个小的包装器脚本,例如:
#!/bin/sh
HG=/full/path/to/hg # executable
if echo $* | grep -P -q -- 'push.*\s-r($|\s)' ; then
$HG $*
else
$HG $* -r default
fi
将其命名为'hg',并将其放在路径的前面。
您是否正在使用Tortoise HG?完全恢复为明确的分支名称将使Tortoise HG记住您在后续提交期间正在处理的分支。我不确定它从中收集了什么元数据。
hg up -r {branchname}
例如
hg up -r dev
由于通常您应该在当前工作的分支中推送更改集,所以我修改了ry4an-brase做出的上述回答,以在发出通知的情况下推送当前分支。
#!/bin/sh
HG=/usr/bin/hg # executable
if echo $* | grep -P -q -- 'push\s*$' ; then
printf "\033[1;31mChanged to: hg push -r .\033[0m\n"
$HG $* -r .
else
$HG $*
fi