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

Posted

技术标签:

【中文标题】如何获得忽略回车的补丁?【英文标题】:How do I get patch to ignore carriage returns? 【发布时间】:2011-12-06 23:39:25 【问题描述】:

我正在尝试在 Linux 系统上对具有 Windows 行结尾的文件应用补丁程序,但由于文件中的回车符,我遇到了冲突。

-l 选项(忽略空格)不会忽略 EOL 字符。 有没有办法让补丁忽略 windows 样式的行尾?

【问题讨论】:

通过dos2unix 传递你的补丁文件是否搞砸了? @Matt,我认为补丁中的行尾已经是 Unix 行尾,这就是它无法应用它的原因。我已经在补丁上尝试了 unix2dos,但没有任何效果,但是在文件上应用 dos2unix 会使补丁应用,但我不想在所有空白更改的情况下提交它。 要修补的文件有 Windows 行尾? 嗯...没有什么比将两个文件都转换为 Unix 样式的行结尾,并将结果转换回 Windows 样式更好的了... @Matt,这是一个很好的解决方法,但必须有更好的方法。如果您创建该评论作为答案,我会支持它。 【参考方案1】:

尝试使用手册页中的 --binary 选项(强调我的)

--二进制

以二进制模式写入所有文件,标准输出和 /dev/tty 除外。 读取时,禁用将 CRLF 行尾转换为 LF 行尾的启发式算法。(在符合 POSIX 的系统上,读取和写入永远不会转换行尾。在 Windows 上,默认情况下读取和写入会转换行尾,并且当行尾很重要时,补丁应该由 diff --binary 生成。)

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

【讨论】:

很好的发现。这对于我在 Windows (MinGW) 中使用 git 在 CRLF 文件的存储库中的工作非常宝贵。【参考方案2】:

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

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

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

【讨论】:

他想忽略 crlf 以应用补丁(patch 命令),而不是构建它们(diff 命令)。 对于diff - 请改为查看此问题:***.com/questions/40974170/…【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

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

joe 语法突出显示在那里非常有用,因为我一修复它们,它就正确地为大块着色。

【讨论】:

【参考方案5】:

告诉patch 忽略空格:

     -l, --ignore-whitespace
             Causes the pattern matching to be done loosely, in case the tabs
             and spaces have been munged in your input file.  Any sequence of
             whitespace in the pattern line will match any sequence in the
             input file.  Normal characters must still match exactly.  Each
             line of the context must still match a line in the input file.

这也忽略了 EOL 的不匹配。

【讨论】:

以上是关于如何获得忽略回车的补丁?的主要内容,如果未能解决你的问题,请参考以下文章

如何查看电脑已打的补丁

如何在 Eclipse 控制台中获得没有换行效果的回车?

如何在Eclipse控制台中获得没有换行效果的回车?

回车事件如何触发不同的click

vfp程序运行出现错误 想忽略错误继续执行 用啥命令

JQuery Ajax Mysql 数据检索获得额外的回车并出现在 textarea