2011-08-29 49 views

回答

2

git archive需要的文件路徑作爲參數,所以你可以這樣做:

git diff --name-status commit1 commit2 | awk '{ if ($1 != "D") print $2 }' | xargs git archive -o output.zip HEAD 

UPDATE

下面的工作,如果你的文件名包括空格:

git diff --name-status commit1 commit2 | awk '{ if ($1 != "D") printf("\"%s\"\n", substr($0,3)) }' | xargs git archive -o output.zip HEAD -- 

注意:存檔中包含的文件內容與HEAD相同。要使用其他提交的內容,只需在該命令結尾處將HEAD更改爲您希望的內容即可。

+0

非常感謝 – Ildar

+0

如果某些文件名包含空格,我一直在試圖弄清楚如何使這項工作失敗。你有什麼建議嗎? –

+1

@Neville嘗試'git diff --name-status commit1 commit2 | awk'{if($ 1!=「D」)printf(「\」%s \「\ n」,substr($ 0,3))}'| xargs git archive -o output.zip HEAD - ' –

0

這是命令歸檔變化之間提交標記發佈HEAD,還與文件名包含空格,引號,雙引號,任何特殊字符:

git diff --name-only -z --diff-filter=ACMRT release..HEAD | xargs -0 git archive -o update.tar.gz HEAD -- 
相關問題