Subject: Using git am -p 2 with binary patches

From: Pico Geyer <[email-masked]>
Date: Mon, 31 May 2010 17:59:29 +0200

Hi all.

I've been trying to apply a set of patches from one repository to a completely independent repository (no shared history).
Since the paths are different, I'm applying the patches with git am -p 2
I noticed that whenever my patches contain binary files, git-am fails to apply the patch.

Here's a simple test case:
mkdir gittmp
cd gittmp
git init
mkdir subdir
echo "abcdefghijklmnop" > blah.txt
tar -czf subdir/binfile.tgz blah.txt
git add subdir/binfile.tgz
git commit -m "Added binary file"
git format-patch --root HEAD
git am -p 2 0001-Added-binary-file.patch

And the output that I get is:
Applying: Added binary file
fatal: git diff header lacks filename information when removing 2 leading pathname components (line 9)
Patch failed at 0001 Added binary file
When you have resolved this problem run "git am --resolved".
If you would prefer to skip this patch, instead run "git am --skip".
To restore the original branch and stop patching run "git am --abort".

Is this a bug in git-am or git-apply?
Or is there a good reason why this doesn't work?

I'm using the latest git version (1.7.1)

Thanks in advance.
Pico