2011-08-29 65 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 --