Git应用跳过补丁

Iul*_*rei 16 git patch

我正在尝试应用包含二进制文件的补丁,git apply但只添加了文件.我试过跑git apply failing.patch -v,它打印的东西像:

跳过补丁'file.txt'.
检查补丁文件.bin ...
干净地应用补丁文件.bin.

我怎样才能知道跳过的原因是什么?由于目前的消息不是很有启发性.

Iul*_*rei 23

我通过运行patch -p1 < failing.patch哪个打印发现了问题:

在输入第5行找不到要修补的文件

并提醒我,我不在根目录中.

我无法理解为什么之前没有人问过这个问题,为什么冗长的信息并不详细.

此外,甚至官方文件都没有提到跳过和可能的原因.

  • 我遇到过同样的问题。尽管[此参考资料](https://www.drupal.org/node/1129120)是Drupal特定的,但原因可以在任何地方使用-也就是说,如果存在任何错误,git将不会应用补丁,而patch命令以更零碎的方式工作。 (2认同)

小智 10

如果您使用 --directory 选项“git apply”:

--directory=<root>
Run Code Online (Sandbox Code Playgroud)

该路径相对于基础目录(包含“.git”的那个,而不是相对于当前工作目录。您也不能使用绝对路径。

这是完全没有记录的,我花了几个小时才发现。


Ale*_*der 7

遇到同样的问题。就我而言,错误来源是.git补丁目标的某些父目录中的文件夹。解决方案是将补丁目标移到该父目录之外。


Ed *_*all 5

在尝试跨项目移植更改时遇到此问题。 git apply似乎忽略补丁文件路径上的任何目录名称,如果索引行与目标存储库中的文件哈希不匹配,它也会拒绝应用。我使用这些选项取得了更好的成功(其中--no-index似乎没有记录):

git apply --verbose --no-index --directory {subdir} {patch-file} 
Run Code Online (Sandbox Code Playgroud)