【问题标题】:how did git handle one of several patches?git 如何处理几个补丁之一?
【发布时间】:2013-08-05 06:09:14
【问题描述】:

假设一个文件有 5 个补丁,其中 4 个补丁更改了文件内容并添加了新行。但是我们仍然可以将单个补丁 5 应用于 git 树。为什么?由于我认为行号已更改,因此行内容不再匹配。 git 如何确定我更改了哪一行?通过三行上下文的变化?我不认为这是合理的。

顺便说一句,如何生成像 [PATCH 0/5] 这样的数字零补丁?格式补丁好像只能从0001生成。

【问题讨论】:

  • 为什么你觉得它不可信?另请参阅patch 命令。
  • @VonC 因为如果一个上下文多次出现,或者之前的补丁创建了一个上下文,那么勉强应用补丁 5 的结果将是错误的。

标签: linux git patch


【解决方案1】:

通过三行上下文的变化?

git apply 是这样描述的:

确保每次更改前后至少有<n> 行周围的上下文匹配。
当周围上下文的行数较少时,它们都必须匹配。

所以是的,即使 numbers 行发生了变化,上下文仍然是决定是否应用补丁的关键。


关于编号方面,我没有测试,但是看看git format-patch command--start-number选项是否有帮助:

--start-number <n>

&lt;n&gt; 开始对补丁进行编号,而不是 1。

【讨论】:

  • 似乎所有问题都在 man 补丁中得到了很好的解释。也感谢@torek 的回答。
  • 只是仍然不知道如何生成 [PATCH 0/n]...有人知道吗?
  • @dspjm 我已经编辑了我的答案,建议尝试一个选项(关于补丁编号)。
  • 是的,我看到了,但这不是它的工作方式,我们使用一个名为 cover* 的选项来做到这一点。 start-number 必须不小于 1。
猜你喜欢
  • 1970-01-01
  • 2013-08-31
  • 2015-05-21
  • 1970-01-01
  • 1970-01-01
  • 2014-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多