8

我需要为某人制作一个补丁(他们没有使用 git)——一个由提交更改的文件的 zip。

我想像

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

但这会提取整个内容,而不仅仅是更改的文件。有没有办法做到这一点?为了使它更复杂 - 有没有办法通过多次提交来做到这一点(是的,我应该在进行更改之前进行分支,但这是事后诸葛亮)

编辑

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

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

3 回答 3

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

填写正确的 SHA/refs。例如,要创建仅包含在masterfeature分支之间更改的文件的 zip:

git diff --name-only master feature | zip dest.zip -@
于 2012-05-29T17:43:14.640 回答
1

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

于 2012-05-29T17:41:48.547 回答
0

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

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

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

于 2019-10-10T10:34:53.100 回答