问题
I'm attempting to apply a patch to a file with Windows line endings on a Linux system and I'm getting conflicts due to the carriage returns in the file.
The -l
option (ignore whitespace) isn't ignoring the EOL characters. Is there anyway to get patch to ignore windows style line endings?
回答1:
Try using the --binary option, from the manpage (emphasis mine)
--binary
Write all files in binary mode, except for standard output and /dev/tty. When reading, disable the heuristic for transforming CRLF line endings into LF line endings. (On POSIX -conforming systems, reads and writes never transform line endings. On Windows, reads and writes do transform line endings by default, and patches should be generated by diff --binary when line endings are significant.)
I don't fully understand the above, but it worked for me on a Linux machine to apply a Unix patch onto a DOS file.
回答2:
Here's a link http://www.chemie.fu-berlin.de/chemnet/use/info/diff/diff_2.html
The
-w' and
--ignore-all-space' options ignore difference even if one file has white space >where the other file has none. White space characters include tab, newline, vertical tab, >form feed, carriage return, and space
Run diff like: diff -w file1.txt file2.txt
回答3:
I had this problem with a diff that was manually copied and pasted from git diff
console output, into a patch file with LFs. To get that patch file to work again - to be able to be applied on the actual files that were using CRs and LFs - several things had to be done manually:
- find all instances of "^M" and drop them
- add CR to all lines within the hunks - but not the meta format lines (@@ etc)
- on all lines within hunks that were empty, add the missing space in the first column
joe
syntax highlighting was very helpful there, because it colored hunks properly as soon as I fixed them.
回答4:
I work around this using the following commands to convert all files of interest to unix line endings.
dos2unix `cat mixed-line-ending.patch | grep Index\: | sed -e 's/Index\://'`
dos2unix mixed-line-ending.patch
patch -p0 < mixed-line-ending.patch
来源:https://stackoverflow.com/questions/7754972/how-do-i-get-patch-to-ignore-carriage-returns