git是否可以格式化补丁,以便与补丁程序一起使用?

git是否可以格式化补丁,以便与补丁程序一起使用?,git,patch,Git,Patch,我需要从git存储库中创建简单的补丁,这些补丁可以通过简单的补丁命令行实用程序应用 能做到吗 补丁,即git diff产生的补丁,由patch工具正确处理 patch跳过git附加到补丁文件的所有附加信息。要应用修补程序,您很可能需要-p1选项。接受的答案说明如下: git diff生成的补丁由补丁工具正确处理 我很确定我遇到了一个不正确的案例/usr/bin/patch只是默默地(不报告错误)忽略了我的补丁,包括文件重命名信息,从而破坏了部署(幸运的是,我现在只测试部署:-) 我发布这个备选答

我需要从git存储库中创建简单的补丁,这些补丁可以通过简单的补丁命令行实用程序应用


能做到吗

补丁,即
git diff
产生的补丁,由
patch
工具正确处理


patch
跳过git附加到补丁文件的所有附加信息。要应用修补程序,您很可能需要
-p1
选项。

接受的答案说明如下:

git diff生成的补丁由补丁工具正确处理

我很确定我遇到了一个不正确的案例
/usr/bin/patch
只是默默地(不报告错误)忽略了我的补丁,包括文件重命名信息,从而破坏了部署(幸运的是,我现在只测试部署:-)

我发布这个备选答案是为了提醒其他遇到同样问题的人,因为我挠头了一段时间。。。另外,对StackOverflow上答案的评论显然不能包含引号


具有讽刺意味的是,我刚刚切换到统一的diff格式来解决这个问题,而现在我的部署以不同的方式中断,因为统一的diff不能表示空文件的创建(例如
\uuu init\uuuuuuuuuuupy
)。谈论在岩石和坚硬的地方之间

由git格式补丁生成的补丁也由GNU补丁正确处理。。。除非它们是使用-M/-C选项生成的,并且包含
补丁
手册页中有关重命名等的信息:“补丁尝试跳过任何前导垃圾,应用差异,然后跳过任何尾随垃圾。”git差异中最大的独特之处是添加了模型线(例如,“索引…”、“重命名…”、“新文件…”)补丁可以简单地跳过这些。Git也会在文件名前加前缀,例如“a/path/to/file”,但是补丁的-p1可以跳过它。有没有办法生成一个可以通过“patch-p0”进行的补丁?我正在为macports的某些程序应用我自己的补丁程序,但macports使用-p0应用补丁程序。@icando,您是否尝试了
--无前缀
选项?谢谢。
--no prefix
选项起到了作用。否则,默认生成的差异与
补丁
不兼容。