我正在尝试将修补程序应用于Linux系统上带有Windows行结尾的文件,并且由于文件中的回车而导致冲突。
-l
选项(忽略空格)不会忽略EOL字符。 是否有补丁忽略Windows风格的行结尾?
答案 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的实际文件 - 必须手动完成几件事:
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