10

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

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

我认为这是非常不幸的,因为这是一个非常简单的错误并且具有非常严重的后果(至少必须为每个提交的更改做一个hg backout和一个额外的操作hg push,以便生成一个“撤消” las 的新提交中央存储库,但历史变得令人费解且令人不快。

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

你有什么建议吗?我在想类似的事情:

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

由于这是一个完全主观的问题,因此这是社区 wiki。

谢谢!

4

2 回答 2

9

一些模糊的想法:

  • 您可以从您的仓库中删除默认推送位置
  • 你可以写一个“你的意思是qpush吗?是的,不是的”预推送钩子

这个钩子(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'
  • 你可以别名 push 到 qpush 和别名 pushtoserver 来推送(我认为这可行,但现在不能尝试)
于 2010-03-10T10:26:31.350 回答
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!

另请参见hgrc 手册页的别名部分

于 2010-03-10T10:30:11.723 回答