3

我希望我的默认 hg 状态重新生成子存储库。这在 .hgrc 中很容易做到:

[alias]
status = status -S

但我想要另一个别名,比如 hg status-no-subrepo,但没有。

[alias]
status-no-subrepo = status

不幸的是,这不起作用,因为 status-no-subrepo --expands-to--> status --expands-to--> status -S。我想那时有一些东西可以阻止递归。

有任何想法吗?


顺便说一句,这似乎违反了 Glew 的规则之一:任何可以打开的命令行选项都应该可以关闭。可能 -S == -S:1, -S:0 关闭。

4

2 回答 2

2

很简单,将您的原始别名使用不同的名称

[alias]
sstat = status -S

我知道,这不是您要寻找的答案,但这很容易。这也意味着,如果您迁移到未安装别名的系统,您不会感到困惑(您会收到适当的错误提醒您),而其他人在您的帐户中执行操作时也不会感到困惑。

我无法告诉你有多少次我帮助某人只是为了对他们的别名lsls -lrmto感到恼火rm -i

一般来说,我认为使用个性化版本覆盖常用命令是不明智的。

于 2012-06-02T10:12:50.837 回答
1

运行时需要禁用status别名status-no-subrepo

[alias]
status = status -S
status-no-subrepo = !$HG --config alias.status=status status $@

我不使用 subrepos,但我用我的 glog 别名测试了类似的功能。

glog = !$HG log --graph --branch $($HG branch) $@
glog-all-branches = !$HG --config alias.glog=glog glog $@

告诉 Mercurial这!是一个 shell 命令,而不是 Mercurial 子命令。运行 shell 命令时,Mercurial 将 $HG 设置为运行的hg可执行文件的路径。默认情况下,别名后的参数不会传递到 shell 命令中,因此$@将它们添加回来。这允许您运行命令,例如hg status-no-subrepo --no-status在没有子存储库的情况下显示更改并隐藏状态前缀。

于 2012-06-03T19:33:39.383 回答