2009-12-18 76 views
8

直到最近,我們一直在爲我們的web studio的所有項目使用SVN,並且在Subversive和TortoiseSVN等幾個客戶端中提供了一個非常方便的功能,可以提取某個修訂中已更改的所有文件。如何提取Mercurial中變更集的所有更改文件?

有沒有辦法在Mercurial中做到這一點?我不在乎它是通過GUI還是通過命令行完成的,只需要在特定變更集中更改一組文件即可。

P.S.我第一次肯定錯了。我需要的不僅僅是文件列表,將所有文件導出到其他文件夾將會非常好。

+0

你的意思是文件的名稱或內容或文件的差異? – 2009-12-18 08:58:57

回答

11

大廈傑羅姆的答案,這將讓你在版本4更改的文件的副本:

hg archive --type files --rev 4 -I $(hg log -r 4 --template {files} | sed 's//-I /g') ~/changedfiles 

這使一切都改變爲修訂四個文件到一個新創建的目錄名爲changedfiles在你的家園。

如果將其更改爲:

hg archive --type zip --rev 4 -I $(hg log -r 4 --template {files} | sed 's//-I /g') ~/changedfiles.zip 

那麼他們出現在一個zip壓縮文件。

值得注意的是,只有在文件名中沒有空格的情況下才有效。如果您犯了這個錯誤,那麼我們需要使用hg status --print0 -r revision -r parent-of-revision代替,但希望這不是必需的。

另請注意,我們的示例中修訂版本號'4'顯示了兩次。整個事情可以很容易地被包裝在一個shell腳本中,並且這將被參數化,所以你不必記得在兩個地方改變它。

0

此命令輸出所有的名字在指定的修訂改變的文件:

hg export revision_num | grep ^diff | cut -f 6 -d ' ' 
+0

這幾乎是我需要的!我只需要以某種方式將結果傳遞給cp並將所有文件複製到某個單獨的文件夾。謝謝! – 2009-12-18 11:58:33

1

根據您的斯內德,有兩個命令:

  1. 獲取與特定版本所帶來的變化,您可以使用hg export

    hg export -r 23 
    

,這將產生的所有改變的差異(實際上是一個格式化的補丁程序,準備應用)

  • 爲了獲取名稱全部都受到影響,您可以將文件使用hg log

    hg log -r 23 -v 
    
  • 這將打印元信息的修改,與受到影響的文件的名稱一起。

    +0

    您當然也可以使用hg diff -r rev -r rev-1,這與出口 – 2009-12-18 09:23:39

    +1

    @jk的差異部分相同,「hg export」優於「hg diff」,因爲它消除了查找父變更集並不總是遞減的(例如,編號會與合併等混淆)。 – notnoop 2009-12-18 09:36:30

    +2

    @notnoop,你可以用'hg diff -c'來表示:) – tonfa 2009-12-18 11:17:43

    7

    這讓您在修訂4修改過的文件的列表:

    hg log -r 4 --template {files} 
    

    更新:如果你想有每行一個文件,你可以使用the style described in Hg book

    相關問題