2010-02-05 74 views

回答

10

在善變1.4及更高版本可以使用summary命令更優雅,這使輸出這樣當變化存在:

$ hg summary 
parent: 0:ad218537bdef tip 
commited 
branch: default 
commit: 1 modified 
update: (current) 

這個提交後:

$ hg summary 
parent: 1:ef93d692f646 tip 
sfsdf 
branch: default 
commit: (clean) 
update: (current) 

另外,還可以安裝prompt extension,做這樣的事情:

$ hg prompt '{status}' 

將輸出一個!?或沒有適當的。

這兩者當然只是替代文本輸出。我找不到任何直接使用退出代碼的東西,但是由於$?檢查你可以做的管道中的最後一個命令?

hg summary | grep -q 'commit: (clean)' 

這將設置$?非零如果有任何更改未提交:

$ hg summary | grep -q 'commit: (clean)' ; echo $? 
0 
$ echo more >> that 
$ hg summary | grep -q 'commit: (clean)' ; echo $? 
1 
+0

感謝您的回答。我結束了(在zsh中)'[[「沒有改變」=''hg ci -m tick'']] || hg推'。我不喜歡它,因爲在某些未來版本的mercurial中,確切的措辭可能會改變(這也適用於您的hg摘要解決方案)。是的,'hg prompt'{status}''應該可以正常工作,除了我更喜歡使用核心hg功能,因爲腳本將在外部主機上運行,​​所以我的自定義擴展(手動更新)有一天會變得不可兼容hg(autoupdated)版本。 – 2010-02-06 18:14:35

+1

看起來好像mercurial不是被設計成和git一樣在腳本中使用,是嗎? – 2010-02-06 18:15:09

+2

您對字符串更改的擔憂是有道理的,但是在不同的語言環境下運行不夠,我認爲這不會成爲問題。 mercurial的作者Matt Mackal認爲API的文本輸出部分,如果有其他選項可用,不允許改變它。你不會看到格式的變化。 – 2010-02-06 21:51:49

0

應該有一些比單純

[ `hg st |wc -l` -eq 0 ] && echo hi 
4

您也可以運行hg id。如果散列以+結尾,則表示工作副本已更改。這應該甚至適用於老版本的hg。

這聽起來像你已經在使用zsh;好吧,幾天前我幫助更新了內置的VCS_INFO的Mercurial支持,以便將VCS信息放入提示中。爲下一個版本提供支持,以顯示工作目錄(除其他外)的更改。如果你不想等,你可以grab the necessary files from CVS

目前我的提示包括這(使用唯一內置的zsh功能):

(hg)[1801+ branchname somemq.patch, anycurrentbookmarks] 
+0

謝謝!這聽起來像一個黑客,但實際上似乎是工作:)嗯。自從我上次看到CVS被使用以來已經有一段時間了;) – 2010-02-17 18:35:21

+0

如果您添加了一個未添加到存儲庫中的新文件,這不起作用 – etalon11 2018-02-12 09:57:43

2

我用:

hg status -m -a -r -d -u 

如果與被跟蹤的文件沒有變化,則命令輸出一個空的字符串。

+0

Works good!我添加了參數「-u」來跟蹤也屬於未提交更改的未知文件。 – etalon11 2018-02-12 09:59:32

2

我現在用的這個慶典 - 摘錄了一段時間:

if [[ $(hg status 2>/dev/null) ]] 
then 
    # do something 
fi 
+0

這是由未跟蹤的文件觸發的,也可能不是您想要的。 – xixixao 2016-01-24 03:01:21

1

兩個idsummarystatus慢,所以這是我目前知道的最快方式,而忽略未跟蹤文件:

[[ -z `hg status | grep -v '^?'` ]] && echo no-changes || echo has-changes