【发布时间】:2023-03-09 11:06:02
【问题描述】:
我需要从 git 存储库创建简单的补丁,这些补丁可以通过简单的补丁命令行实用程序应用。
可以吗?
【问题讨论】:
我需要从 git 存储库创建简单的补丁,这些补丁可以通过简单的补丁命令行实用程序应用。
可以吗?
【问题讨论】:
git diff 产生的补丁由patch 工具正确处理。
patch 跳过 git 附加到补丁文件的所有附加信息。要应用补丁,您很可能需要-p1 选项。
【讨论】:
git format-patch 生成的补丁也被 GNU 补丁正确处理...除非它们是使用 -M / -C 选项生成的并且包含有关重命名等的信息。
patch 手册页:“补丁尝试跳过任何前导垃圾,应用差异,然后跳过任何尾随垃圾。” git diffs 中最大的独特之处在于添加了模式行(例如“索引...”、“重命名...”、“新文件...”),并且补丁能够简单地跳过这些。 Git 还为文件名添加前缀,例如“a/path/to/file”,但是可以通过patch的-p1跳过。
--no-prefix 选项吗?
--no-prefix 选项成功了。否则默认生成的差异与patch 不兼容。
接受的答案如下:
git diff 产生的补丁由补丁工具正确处理。
我很确定我刚刚遇到了一个不正确的案例。 /usr/bin/patch 只是默默地(不报告错误)忽略了我的补丁,包括文件重命名信息,从而破坏了部署(幸运的是,我目前只是在测试部署:-) ...
我发布这个替代答案是为了提醒其他遇到同样问题的人,因为我有一段时间摸不着头脑......而且 StackOverflow 上的答案显然不能包含引号。
具有讽刺意味的是,我刚刚切换到统一差异格式来克服这个问题,现在我的部署以不同的方式中断,因为统一差异不能代表空文件的创建(例如 __init__.py)。谈论在岩石和坚硬的地方之间!
【讨论】: