How do I get patch to ignore carriage returns?

天涯浪子 提交于 2019-12-03 01:22:20

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.

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

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.

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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!