Git可以格式化补丁文件以便与补丁程序一起使用吗?

19

我需要从Git仓库创建简单的补丁,可以使用简单的patch命令行工具进行应用。

这可行吗?

2个回答

21

使用 git diff 命令生成的补丁可以被 patch 工具正确处理。

patch 跳过 git 在补丁文件中附加的所有额外信息。要应用此补丁,您可能需要使用 -p1 选项。


3
使用 git format-patch 命令生成的补丁,如果没有使用 -M/-C 选项并包含重命名等信息,那么它们也可以被 GNU patch 正确处理。 - Jakub Narębski
3
patch手册中可以看到:“patch尝试跳过任何前导垃圾,应用差异,然后跳过任何尾部垃圾。” Git差异中的独特之处在于添加了模型线(例如,“index ...”,“rename ...”,“new file ...”),而patch可以简单地跳过这些内容。Git还为文件名添加前缀,例如“a/path/to/file”,但是这可以通过patch的-p1选项跳过。 - Cascabel
有没有一种方法可以生成一个能够被 'patch -p0' 执行的补丁呢?我正在为一些 MacPorts 程序应用自己的补丁,但是 MacPorts 使用 -p0 来应用补丁。 - Kan Li
2
@icando,你尝试过使用 --no-prefix 选项吗? - P Shved
谢谢。--no-prefix选项解决了问题。否则默认生成的差异与“patch”不兼容。 - coladict

4
接受的答案如下所述:
补丁,git diff产生的,将被正确处理patch工具。
我相信我刚遇到了一个不正确的情况。 /usr/bin/patch无声无息地(没有报告错误)忽略了我的修补程序,包括文件重命名信息,从而破坏了部署(幸运的是,此时我仅在测试部署...)
我发布这个备选答案是为了提醒其他遇到同样问题的人,因为我一直在思考一段时间... 另外,StackOverflow上对答案的评论显然不能包含引用。
有趣的是,我现在刚刚转换到统一的diff格式来克服这个问题,现在我的部署以不同的方式中断了,因为统一的diff无法表示创建空文件(例如__init__.py)。 谈论处于困境中!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接