How do I get patch to ignore carriage returns?

可紊 提交于 2019-12-03 10:52:15

问题


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

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