【问题标题】:Can git format patch so it can be used with patch program?git 可以格式化补丁,以便它可以与补丁程序一起使用吗?
【发布时间】:2023-03-09 11:06:02
【问题描述】:

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

可以吗?

【问题讨论】:

    标签: git patch


    【解决方案1】:

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

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

    【讨论】:

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

    接受的答案如下:

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

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

    我发布这个替代答案是为了提醒其他遇到同样问题的人,因为我有一段时间摸不着头脑......而且 StackOverflow 上的答案显然不能包含引号。

    具有讽刺意味的是,我刚刚切换到统一差异格式来克服这个问题,现在我的部署以不同的方式中断,因为统一差异不能代表空文件的创建(例如 __init__.py)。谈论在岩石和坚硬的地方之间!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      • 2014-02-16
      • 1970-01-01
      • 2018-12-10
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      相关资源
      最近更新 更多