3

我创建了一个补丁文件,其中包含一个二进制文件,使用:

$ 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.pngyield中删除了 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

4

0 回答 0