提取git提交中更改的所有文件

时间:2012-05-29 17:38:07

标签: windows git

我需要为某人制作补丁(他们不使用git) - 通过提交更改的文件的zip。

我想像

git archive --format = zip commitguid> myfiles.zip

但这会提取整个内容,而不仅仅是已更改的文件。有没有办法做到这一点? 并且使它变得更复杂 - 有没有任何方法可以通过多次提交来执行此操作(是的,我应该在进行更改之前进行分支,但事后才知道)

修改

基于下面的@Amber解决方案,我可以在Git Bash的两个步骤中执行此操作,以便在c:\ data \ progs中安装7Zip的Windows。

git diff --name-only a-sha b-sha > tmp.txt
/C/data/progs/7za.exe a myzip.zip @tmp.txt

3 个答案:

答案 0 :(得分:15)

git diff --name-only <oldsha> <newsha> | zip dest.zip -@

填写适当的SHAs / refs。例如,要创建仅包含masterfeature分支之间更改的文件的zip:

git diff --name-only master feature | zip dest.zip -@

答案 1 :(得分:1)

另见git help format-patch。它生成一个提交中所有更改的diff补丁,以及提交作者,日期,消息和一些不错的差异统计信息。你可以压缩并发送它。

答案 2 :(得分:0)

我找到了问题(on github-gist,来自rmkpatchaa用户)的解决方案。
它不需要任何外部工具,并且是Windows Git Bash窗口中的单行命令:

git archive --output=changes.zip HEAD $(git diff --name-only SHA1 SHA2 --diff-filter=ACMRTUXB)

它创建了一个标准的zip存档,其中只包含两次提交之间更改的文件,没有多余的git东西或任何东西,并且在接收端不需要任何额外的工具。