为何该补丁应用失败?已尝试多种排查手段仍未解决
补丁Hunk匹配失败的解决方法
你遇到的问题根源是补丁的上下文与目标文件不匹配:原补丁是基于没有# core: 8.x注释行的文件生成的,但实际目标文件中多了这一行注释,导致patch命令无法定位到正确的hunk起始位置,最终出现Hunk #1匹配失败的错误。
以下是两种可行的解决方法:
方案1:重新生成适配目标文件的补丁
直接基于当前带注释的目标文件制作补丁:
- 备份目标文件:
cp web/modules/contrib/activitytracking/activity_tracking.info.yml web/modules/contrib/activitytracking/activity_tracking.info.yml.orig - 修改目标文件:删除
core: '8.x'行,将core_version_requirement改为^8 || ^9 || ^10 - 生成新补丁:
diff -u web/modules/contrib/activitytracking/activity_tracking.info.yml.orig web/modules/contrib/activitytracking/activity_tracking.info.yml > /var/www/html/patches/activitytracking-2023-09-14-fixed.patch - 替换原补丁文件,重新通过composer应用即可。
方案2:手动修改现有补丁
直接调整原补丁的hunk行号和上下文,使其匹配目标文件:
修改后的补丁内容如下:
diff --git a/activity_tracking.info.yml b/activity_tracking.info.yml index bb406b3..ca61b8f 100644 --- a/activity_tracking.info.yml +++ b/activity_tracking.info.yml @@ -6,5 +6,4 @@ dependencies: - drupal:user - drupal:system (>=8.1.0) -core: '8.x' -core_version_requirement: ^8 || ^9 +core_version_requirement: ^8 || ^9 || ^10
修改说明:
将原补丁的@@ -5,5 +5,4 @@改为@@ -6,5 +6,4 @@——因为目标文件多了一行# core: 8.x注释,hunk的起始行从原第5行偏移到了第6行,调整后patch就能找到正确的匹配上下文。
修改完成后,重新执行之前的patch命令或通过composer应用补丁即可成功。
内容的提问来源于stack exchange,提问作者bfuzze
相关产品推荐
相关产品推荐

