直到最近,我們一直在爲我們的web studio的所有項目使用SVN,並且在Subversive和TortoiseSVN等幾個客戶端中提供了一個非常方便的功能,可以提取某個修訂中已更改的所有文件。如何提取Mercurial中變更集的所有更改文件?
有沒有辦法在Mercurial中做到這一點?我不在乎它是通過GUI還是通過命令行完成的,只需要在特定變更集中更改一組文件即可。
P.S.我第一次肯定錯了。我需要的不僅僅是文件列表,將所有文件導出到其他文件夾將會非常好。
直到最近,我們一直在爲我們的web studio的所有項目使用SVN,並且在Subversive和TortoiseSVN等幾個客戶端中提供了一個非常方便的功能,可以提取某個修訂中已更改的所有文件。如何提取Mercurial中變更集的所有更改文件?
有沒有辦法在Mercurial中做到這一點?我不在乎它是通過GUI還是通過命令行完成的,只需要在特定變更集中更改一組文件即可。
P.S.我第一次肯定錯了。我需要的不僅僅是文件列表,將所有文件導出到其他文件夾將會非常好。
大廈傑羅姆的答案,這將讓你在版本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腳本中,並且這將被參數化,所以你不必記得在兩個地方改變它。
此命令輸出所有的名字在指定的修訂改變的文件:
hg export revision_num | grep ^diff | cut -f 6 -d ' '
這幾乎是我需要的!我只需要以某種方式將結果傳遞給cp並將所有文件複製到某個單獨的文件夾。謝謝! – 2009-12-18 11:58:33
根據您的斯內德,有兩個命令:
獲取與特定版本所帶來的變化,您可以使用hg export
:
hg export -r 23
,這將產生的所有改變的差異(實際上是一個格式化的補丁程序,準備應用)
爲了獲取名稱全部都受到影響,您可以將文件使用hg log
:
hg log -r 23 -v
這將打印元信息的修改,與受到影響的文件的名稱一起。
這讓您在修訂4修改過的文件的列表:
hg log -r 4 --template {files}
更新:如果你想有每行一個文件,你可以使用the style described in Hg book。
你的意思是文件的名稱或內容或文件的差異? – 2009-12-18 08:58:57