10

对于那些你使用水银与MQ扩展:如何避免不小心'hg push'而不是'hg qpush'?

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

我觉得这是非常不幸的,因为它是一个非常简单的错误,使和有非常严重的后果(至少不必做的每个提交的变化hg backout和一个额外的hg push以生成新的承诺是“撤消”拉斯维加斯一个中央资源库,但历史变得错综复杂和不愉快。

我的目标是配置在我奥登环境中的一些别名或一件让hg push更难偶然的事情。

待办事项你有什么建议吗?我想的是这样的:

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

因为这是一个完全主观的问题,所以这个问题就像社区wiki一样。

谢谢!

+3

'alias qp = hg qpush' – kennytm 2010-03-10 10:32:09

+1

+1。无论如何,我已经看到更多不属于社区维基的主观问题:) – 2010-03-10 10:32:41

+0

@KennyTM:你说得对,我应该为我使用最多的命令制作别名。但我知道我最终会忘记我有别名,并尝试键入'hg qpush'只是因为我已经习惯了。 – 2010-03-10 11:20:19

回答

9

一些模糊的想法:

  • ,你可以从你的回购协议中删除默认推位置
  • 你可以写一个“你的意思是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推(我想这样的作品,但不能立即试用)
+0

非常有帮助。这两个第一个建议恰恰就是我正在寻找的那种答案:解决我的问题的不同选择。我喜欢钩的想法,但我不知道如何编写它们。这样我就可以继续使用本机命令,但有一个安全网。谢谢。 – 2010-03-10 11:18:02

+0

这本书在钩子上有一个很好的篇章 - 在答案中增加了一个链接 – 2010-03-10 11:30:22

+0

谢谢jk,我阅读了这一章,并用阅读后提出的钩子编辑了你的问题。 – 2010-03-10 12:28:17

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

+1

不错。谢谢。现在大家都知道我在发帖之前没有尝试过)=) – 2010-03-10 11:15:28