Git创建完整的文件补丁下载/分发?

时间:2011-02-11 05:15:48

标签: git

无论是我疯了还是没有人喜欢/喜欢这个功能,但很久以前我曾经使用过sourceforge系统的subversion。我有能力为提交的提交创建完整的文件补丁。

无论如何我无法弄清楚在git中创建这些文件,我想要的是从XX提交更改的文件以及仅完整的文件,以便我可以将它们交给某人/将这些文件上传到某个位置

目前看来,我不得不重新上载整个项目,因为我什么也没告诉我改变了什么。由于我们也在共享的Web主机上,因此无需升级到更昂贵的软件包就无法在服务器上获取git。

我试过

git archive --output=/home/username/temp.zip <commit id>

将所有东西都很好地放入拉链但是它确实如此,它放了一切。还尝试了格式补丁的变体,但似乎没有用。

2 个答案:

答案 0 :(得分:15)

在我的其他答案中,我似乎误解了你想要的东西。 git archive可以列出要包含在存档中的路径,以便您可以执行以下操作:

git archive -o /tmp/foo.zip HEAD $(git diff --name-only oldcommit HEAD)

如果你的文件名包含令人惊讶的字符,那么它会更安全:

git diff -z --name-only oldcommit HEAD | xargs -0 git archive HEAD -o /tmp/blah.zip --

答案 1 :(得分:3)

首先要尝试保存git diff的输出,这可能足以满足您的需求:

git diff oldcommit > test.patch

如果您从那时起更改了二进制文件,可以尝试:

git diff --binary oldcommit > test-with-binaries.patch

在这种情况下,您需要使用git apply应用补丁。否则,我将基于oldcommit创建一个新分支,从master执行压缩合并,提交结果并使用git format-patch生成补丁。在类似的stackoverflow问题的答案中更详细地描述了该方法(以及针对您的问题的其他几种解决方案):How do you squash commits into one patch with git format-patch?