2010-01-21 72 views
87

我是Mercurial的新手。只是找不到正確的命令。嘗試更新/結帳沒有運氣。我正在使用本地存儲庫。謝謝如何在Mercurial中獲取特定版本的文件?

+0

你說的 '特別版' 是什麼意思?你有特別的版本嗎?你想通過獲得特殊版本來完成什麼? – Omnifarious 2010-01-21 06:44:30

+0

@Omnifarious:我提交了一個穩定版本的文件。然後繼續處理文件,但很快意識到我需要最後一個「好」版本。這可以通過更新svn來完成,但是當我嘗試hg更新時,它會顯示「0 files ...」 – Codism 2010-01-21 13:27:49

回答

125

我想你想hg revert -r<rev> <file>(這將改變該文件,因爲它是在給定的修訂版)。

+0

是的,這正是他想要的。 :-) – Omnifarious 2010-01-21 17:10:54

+9

或者只是hg恢復如果你想放棄你當前的修改並獲得最新的修改 – BlackTigerX 2013-09-15 07:03:03

+0

@BlackTigerX如果沒有修改,修改後的文件將不會恢復到任何內容,即使它不是最最近承諾的版本。我有時使用它來修改版本之間的「櫻桃選擇」文件,所以這很重要。 – user2864740 2016-05-11 15:43:13

73

正如djc所說revert改變了一個文件,以配合以前的修訂。如果你不想使用它,你可以使用hg cat -r revisionid filename(代替revisionid和當然的文件名)將文件輸出到標準輸出,適合重定向你喜歡的任何地方。

+3

purrrfect,正是我所希望的。 – yota 2015-03-19 07:06:40

+0

真棒,聽到這樣的事情總是很好。 – 2015-03-19 13:04:26

23

hg revert確實解決了這個問題。但我認爲,你對更廣泛的事情感到困惑,而不是簡單地回答你的問題,並且想要更全面地回答。

hg update是一個完整的存儲庫命令,不適用於單個文件。這與以這種方式顛覆svn update不同。如果你這樣做hg --help update你可以看到這種情況,因爲該命令沒有文件參數。它可以用來將整個存儲庫移動到特定的快照,但不能用於只將一個文件做到這一點。

如果輸入hg --help,您會看到一系列命令。這是一個相當大的,有點令人生畏的名單,但如果你讀通過它,你會發現這條線:

revert  restore individual files or directories to an earlier state 

現在,如果你只是想爲了比較,最後的狀態,有另一個命令你可能會感興趣,那就是hg cat。這將允許您在任何特定版本中打印文件的內容。然後,您可以將其輸出重定向到其他文件。然後,您可以將文件的舊版本和舊版本進行並排比較。

Mercurial有一個單獨的命令update的原因是它有可能在Mercurial中做一些在Subversion中不可能的事情。你可以將update更早的版本,進行更改,然後提交。這將創建一個分支。 update命令的作用是還可以更改當前工作目錄的父版本,並將該目錄中所有文件的內容更改爲該父版本的版本。

這意味着revert更改文件的內容(或者如果給出命令的正確參數,甚至整個存儲庫),但保留當前工作副本的父修訂版本相同。

您可以通過使用hg parents命令找出當前工作副本的父版本(或合併時的修訂版本)。

在Subversion修訂版本中是嚴格的線性進展。 Mercurial在帽子下創建分支,而且它們幾乎一樣容易合併。修訂形成DAG,而不是嚴格的線性進展。

9

要提取特定文件的特定版本,你可以做到這一點在Windows上:

hg cat "<FileToBeExtractedPath>" -r 9 > "<ExtractionPath>" 

這裏,9是版本號。

甚至更​​好:

hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>" 
相關問題