如何避免意外'hg push'而不是'hg qpush'?

时间:2010-03-10 10:13:39

标签: configuration mercurial development-environment mercurial-queue

对于那些使用Mercurial和MQ扩展的人:

这是我第二次意外地将更改提交到中央存储库(hg push)而不是将补丁应用到我的工作目录(hg qpush)。

我认为这非常不幸,因为这是一个非常简单的错误,并且会产生非常严重的后果(至少必须为每个提交的更改按顺序执行hg backout和额外hg push生成一个新的提交,将“撤消”一个“撤消”到中央存储库,但历史变得令人费解和不愉快。

我的目标是在orden的环境中配置一些别名或某些东西,以使hg push更难以做到。

你有什么建议吗?我想的是:

[alias]
push=      <-- how to NOP the push command??
pushtoserver=push

由于这是一个完全主观的问题,这就像社区维基一样。

谢谢!

2 个答案:

答案 0 :(得分:9)

一些模糊的想法:

  • 您可以从repo中删除默认推送位置
  • 你可以写一个“你的意思是qpush吗?是的,没有”推前hook

此钩子(bash命令行)在将更改推送到遥控器之前要求确认(使用mercurial 1.4测试):

[hooks]
preoutgoing.confirm = read -p 'Are you sure you want to push to remote? (y/n): '; echo $REPLY | grep -q 'y'
  • 你可以别名推送到qpush和别名pushtoserver推(我认为这有效,但现在不能尝试)

答案 1 :(得分:6)

将以下内容放入.hgrc:

[alias]
pushtoserver = push
push = 'Did you mean qpush or pushtoserver?'

像这样工作:

$ hg push
alias 'push' resolves to unknown command 'Did you mean qpush or pushtoserver?'

$ hg pushtoserver
abort: repository default-push not found!

另请参阅alias section of the hgrc manpage