Re: How to prepare patch for git am which remove a file ?
- Date: Tue, 20 Nov 2018 13:55:20 +0100
- From: SZEDER Gábor <szeder.dev@xxxxxxxxx>
- Subject: Re: How to prepare patch for git am which remove a file ?
On Tue, Nov 20, 2018 at 01:39:40PM +0100, Mathieu Malaterre wrote:
> Here is a simple setup:
> cd /tmp
> mkdir g
> cd g
> git init .
> wget http://central.maven.org/maven2/org/apache/xmlgraphics/fop/2.1/fop-2.1.pom
> git add fop-2.1.pom
> git commit -m "My First Commit"
> git rm fop-2.1.pom
> git commit -m "Second Commit"
> git format-patch HEAD~
> git reset --hard HEAD~
> git am 0001-Second-Commit.patch
> Applying: Second Commit
> error: patch failed: fop-2.1.pom:1
> error: fop-2.1.pom: patch does not apply
> Patch failed at 0001 Second Commit
> hint: Use 'git am --show-current-patch' to see the failed patch
> When you have resolved this problem, run "git am --continue".
> If you prefer to skip this patch, run "git am --skip" instead.
> To restore the original branch and stop patching, run "git am --abort".
> What is the black magic to get `git am` to understand this patch ?
The file in question uses CRLF line endings.
$ git am --keep-cr 0001-Second-Commit.patch
Applying: Second Commit
For explanation I quote ad2c928001 (git-am: Add command line parameter
`--keep-cr` passing it to git-mailsplit, 2010-02-27):
c2ca1d7 (Allow mailsplit (and hence git-am) to handle mails with CRLF
line-endings, 2009-08-04) fixed "git mailsplit" to help people with
MUA whose output from save-as command uses CRLF as line terminators by
stripping CR at the end of lines.
However, when you know you are feeding output from "git format-patch"
directly to "git am", and especially when your contents have CR at the
end of line, such stripping is undesirable. To help such a use case,
teach --keep-cr option to "git am" and pass that to "git mailinfo".