2013-02-11 102 views
0

我只對單個文件的歷史感興趣。我已經試過了hg log,它顯示了對文件所做的所有更改。但是如果有一個由整個存儲庫構成的分支,我如何從日誌中知道(檢查出該分支中的整個存儲庫,然後查看該文件並手動比較頭部中的不同簽入)該分支得到的文件(即頭部的哪一點)?在Mercurial中,如何檢查分支文件的版本?

(我也試着用搜索引擎無濟於事。也許我沒有使用正確的搜索字詞,因爲我是新來的Mercurial,我希望清楚,雖然我已經解釋了我的目標。)

感謝很多提前!通過增加hgext.graphlog =[extensions]標題您~/.hgrc

$ hg glog foo.py 

請注意,您必須啓用graphlog擴展:

$ cat ~/.hgrc 
[extensions] 
hgext.graphlog = 
… 
$ 

簡單

回答

0

可以使用glog命令,手動的方式來確定什麼時候採取分支運行:

$ hg glog 

然後搜索文件名,看看哪些變更它已經改變

或者,你可以運行:

hg log -r 'ancestors(mybranch)' myfile 

要告訴你無論是在和包含更改myfile mybranch之前所有的變更,然後尋找修改文件的最後變更被帶到分支前:

 
$ hg log -r 'ancestors(mybranch)' myfile 
changeset: 30:3b2f7243c1ac 
user:  David Wolever <[email protected]> 
date:  Mon Nov 15 09:47:46 2010 -0500 
files:  myfile 
description: 
doing stuff 


changeset: 31:804257c328ab <-- last change to the file before the branch 
user:  David Wolever <[email protected]> 
date:  Thu Nov 18 21:44:11 2010 -0500 
files:  myfile 
description: 
changing things 

changeset: 32:df26ccd32c38 <-- change was made to the file in the branch 
branch:  mybranch 
user:  David Wolever <[email protected]> 
date:  Thu Nov 18 23:23:44 2010 -0500 
files:  myfile anotherfile 
description: 
starting mybranch 
+0

謝謝,我以前不知道這個功能。但是,我嘗試了這一點,但這並沒有顯示沒有提交的分支,只顯示了已經改變的分支。 – welkin 2013-02-11 22:45:29

+0

啊,對不起,我錯過了這部分的問題。正如@ Ry4an所說 - 這在Mercurial中並不合適。不過,我已經更新了一些答案,希望這會有所幫助。 – 2013-02-12 02:04:07

1

你想在「SVN」(或CSV)條款。您的問題在Mercurial(或git)的上下文中沒有意義。單個文件在這些DVCS中都沒有版本。版本稱爲修訂版本,並且是存儲庫範圍的。你不能「檢出」一個文件的修訂版本X和另一個修訂版本Y,就像你可以在svn中一樣。

如此的相似,你什麼使一個問題的意義可能是「什麼版本最近更改文件X分支Y」,並得到這個問題的答案辦法之一是:

hg log -r 'ancestors(Y)' X 

hg log -r 'ancestors(default)' TODO 

具有一些具體的價值。

+0

對不起,但是您的命令**必須**拋光 - 您的revset返回變更集列表,而不是單個結果 – 2013-02-12 05:48:46

+0

「您不能」結帳「一個文件的修訂版本X和另一個版本的修訂版本Y」 - **您無法**,我可以(在某種程度上) - 'hg revert -r N FILE' – 2013-02-12 06:01:50

+0

@LazyBadger那不是「結賬」。結賬有穩固的語義w/r/t在mercurial dirstate和回覆只觸及工作目錄。它沒有檢出。 – 2013-02-13 02:29:54

0

不知道這是否是你想要的,但你可以使用任何

hg log -r "contains(filename)" 

hg glog -r "contains(filename)" 

如果您想更具體的東西,請列出包含特定文件名的所有修訂hg help revsets輸出,它顯示了-r選項的可能性。

+0

謝謝,那幫助命令是非常有用的! – welkin 2013-02-12 17:36:47

0

有關任務revset的Ry4an文本日誌必須

"max(branch(Y) & contains(X))" 
+0

謝謝。雖然contains()似乎會返回所有帶有該文件的修訂版本,而不僅僅是修改文件的位置。我查看了文檔,它似乎應該是文件(X)而不是包含(X)。我的理解是否正確? – welkin 2013-02-12 17:44:40

+0

@welkin - 我不記得contains()和file()之間的區別:兩者都是關於變更集中文件模式搜索的文件。是的,包含()關於「變更集中的文件」,但如何在變更集中獲得*未修改的*文件?無論如何,純粹主義者可以使用'修飾(X)' – 2013-02-13 06:31:57

相關問題