我希望我的默认hg状态可以重新定位到subrepos。这很容易在.hgrc中完成:
[alias]
status = status -S
但是我希望有另一个别名,例如hg status-no-subrepo,但不是。
[alias]
status-no-subrepo = status
不幸的是,这不起作用,因为status-no-subrepo --expands-to - > status --expands-to - >状态-S。我想在这一点上有一些东西可以阻止递归。
有什么想法吗?
顺便说一句,这似乎违反了Glew的一条规则:任何可以打开的命令行选项都应该可以关闭。可能-S == -S:1,-S:0关闭。
答案 0 :(得分:2)
简单,将您的原始别名用不同的名称
[alias]
sstat = status -S
我知道,这不是你要找的答案,但这很容易。这也意味着如果你移动到没有安装别名的系统(你会收到正确的错误提醒你),你不会感到困惑,而其他人在你的帐户中做事时不会感到困惑。
我无法告诉你,有多少次我帮助过某些人,只是为了让他们感到恼火,因为他们已ls
别名ls -l
或rm
到rm -i
。< / p>
总的来说,我认为用个性化版本覆盖常见命令是错误的。
答案 1 :(得分: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
之类的命令来显示没有子目录的更改并隐藏状态前缀。