我创建了一个补丁文件,其中包含一个二进制文件,使用:
$ git format-patch --stdout myref^ > patch.diff
但是当我尝试应用它时:
$ git apply -p2 patch.diff
我得到错误:fatal: git diff header lacks filename information when removing 2 leading pathname components (line 2868)
。
第 2868 行是new file mode 100755
,这里是一些上下文的差异:
2866 … 上一个大块头的结束… 第2867章 2868 新文件模式 100755 2869 索引 00000000000000000000000000000000000000000..3c137aa6ba759f2267f75203d6d248be89043beb 2870 GIT 二进制补丁 2871 字面意思 363713 2872 zcmV(@K-RyBP)xh;3K|Lk000e1NJLTq00UqE008_50ssI2p1e?20000PbVXQnQ*UN;
这是怎么回事?有什么方法可以在不手动修复的情况下应用此补丁?
笔记:
- 该错误显然是不正确的,因为从
a/some/path/foo.png
yield中删除了 2 个主要路径组件path/foo.png
,这是有效的。 - 我最终通过手动删除不需要的前导路径组件“修复”了这个问题:
%s:\([ab]\)/some:\1:g
. - 我确信在删除前两个路径组件的情况下,不会产生无效路径。
这是 Mac 上的 git 版本 1.7.3.1,补丁是在 Linux 上创建的。
这是一个演示该问题的补丁文件:
From 174c35d2f4a8794608eccd31b9f7d361b5ee58c3 Mon Sep 17 00:00:00 2001
From: David Wolever <david@wolever.net>
Date: Mon, 7 Jan 2013 13:31:42 -0500
Subject: [PATCH] Added binary file
---
subdir/binfile.tgz | Bin 0 -> 153 bytes
1 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 subdir/binfile.tgz
diff --git a/subdir/binfile.tgz b/subdir/binfile.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..f71f21d3357260edea2fb7b4641a35031c759393
GIT binary patch
literal 153
zcmb2|=3wX(c^$yO{Pz4_zC#KUZV%7Jv4$u7$b3+>V$q5W-=o(~i~CwxWXP!KJ&(NC
zT4Pyq@_6dLr^}Qym*z%)j7Wc5++E4Nw&l{L%+*`M!aP!Y3VSD*E>64d{mt2P<}Z<B
z277AFj|yCBw_ZPA$o~DBBju}0Z{$4AtM@n_Tp#zxnu7rue3)vzamprF1`P%V0B|lt
AD*ylh
literal 0
HcmV?d00001
--
1.7.3.1
(取自http://git.661346.n2.nabble.com/Using-git-am-p-2-with-binary-patches-td5122345.html)