2011-03-24 43 views
18

如果你做hg log myfile -v你會看到一個文件被修改的變更集列表。Mercurial - 確定文件被刪除的位置?

在我們的例子中,在最近的變更集中,文件被刪除。但是你不能通過查看hg log的詳細(-v)輸出來說明這一點。有沒有簡單的Mercurial命令可以用來確定文件是否以及何時從回購庫中刪除?


更新:請注意,這是一個Windows客戶端上,我們正在使用水銀v 1.4.3

更新2:出現如下問題的答案將與較新版本的工作Mercurial,但是升級現在不在卡中。任何其他想法1.4.3?

回答

22

您可以檢查哪些修訂中刪除的文件(任何許多其他有趣的功能)使用revsets:

hg log -r 'removes(<myfile>)'

一些例子:

hg log -r 'removes(build.xml)' //其中的build.xml曾經是在當前目錄

hg log -r 'removes("**/build.xml")' //其中build.xml可能在子目錄中

詳情請參閱hg help revsets

+0

似乎不適合我:'abort:unknown revision'removed(my文件)'!' – 2011-03-24 13:31:39

+1

@Marcus:在Mercurial v1.7中引入了revsets。這聽起來像你使用的是舊版本。 – 2011-03-24 13:44:59

+0

似乎也需要完整的存儲庫路徑(即如果您位於子目錄中,「myfile」或「./myfile」將不起作用) – Nick 2012-03-14 11:57:14

3

這是我用它來列出我的庫中的所有被刪除的文件:

hg log --template "{rev}: {file_dels}\n" | grep -v ':\s*$' 
+1

關於grep我應該注意到我在Windows上。我嘗試刪除管道後的部分,但它似乎不是有用的信息(至少沒有grep)。 – 2011-03-24 13:34:02

+0

是否有一個等效的findstr命令,我們可以在沒有grep的Windows上運行? – WEFX 2013-01-31 13:49:58

+0

@WEFX最好的我可以找到一個'FINDSTR'相當於'| | FINDSTR/R/V「:* $」',但FINDSTR輸出很多消息,比如'FINDSTR:29行太長了,所以你會忽略任何大的提交。 – binki 2013-09-16 18:23:03

16

--removed標誌應該得到你在找什麼:

hg log myfile -v --removed 

從幫助hg log

--removed    include revisions where files were removed 
+0

請注意,只是'hg log myfile'會列出修改文件的所有修訂版本 - 包括它被刪除的位置(我相信)。但我只想找出它被刪除的地方 - 而不是它被修改的地方。 – 2011-03-24 13:32:43

+0

然後,您可能最好的選擇。可能值得更新你的Mercurial版本過去1.7以獲得該功能。 – Den 2011-03-24 14:27:58

+2

由於性能方面的原因(默認情況下,至少在v2.1中),缺省情況下,文件被刪除的更改默認包含在內。 – Nick 2012-03-14 12:04:00