如何获得补丁以忽略回车?

时间:2011-10-13 13:37:43

标签: whitespace patch carriage-return eol

我正在尝试将修补程序应用于Linux系统上带有Windows行结尾的文件,并且由于文件中的回车而导致冲突。

-l选项(忽略空格)不会忽略EOL字符。 是否有补丁忽略Windows风格的行结尾?

4 个答案:

答案 0 :(得分:9)

从联机帮助页(强调我的)

尝试使用--binary选项
  

- 二进制

     

以二进制模式写入所有文件,标准输出和/ dev / tty除外。 在读取时,禁用启发式以将CRLF行结尾转换为LF行结尾。(在POSIX协调系统上,读取和写入从不转换行结尾。在Windows上,读取和写入会默认转换行结尾,当行结尾很重要时,应该通过diff --binary生成补丁。)

我不完全理解上述内容,但它在Linux机器上适用于将Unix补丁应用到DOS文件中。

答案 1 :(得分:8)

这是一个链接http://www.chemie.fu-berlin.de/chemnet/use/info/diff/diff_2.html

  

-w' and - ignore-all-space'选项忽略差异,即使一个文件有空格>其他文件没有。空格字符包括制表符,换行符,垂直制表符,>换页符,回车符和空格

运行差异:diff -w file1.txt file2.txt

答案 2 :(得分:1)

我遇到了这个问题,手动将git diff控制台输出复制并粘贴到带有LF的补丁文件中。要使该补丁文件再次起作用 - 能够应用于使用CR和LF的实际文件 - 必须手动完成几件事:

  • 找到“^ M”的所有实例并删除它们
  • 将CR添加到帅哥中的所有行 - 但不是元格式行(@@ etc)
  • 在空白的所有空行中,添加第一列中缺少的空格

joe语法突出显示在那里非常有帮助,因为它在我修复它们后就会正确地解决了问题。

答案 3 :(得分:1)

我使用以下命令解决此问题,将所有感兴趣的文件转换为unix行结尾。

dos2unix `cat mixed-line-ending.patch | grep Index\: | sed -e 's/Index\://'`
dos2unix mixed-line-ending.patch
patch -p0 < mixed-line-ending.patch