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