我有两个文件看起来与我相同(包括尾随空格和换行符),但 diff 仍然说它们不同。即使当我进行diff -y
并排比较时,线条看起来也完全相同。 diff 的输出是整个 2 个文件。
知道是什么原因造成的吗?
答案1
答案2
尝试:
diff file1 file2 | cat -t
该-t
选项将导致cat
清楚地显示任何特殊字符 - 例如。^M
对于 CR,^I
对于选项卡。
从手册页(OS X):
-t Display non-printing characters (see the -v option), and display tab characters as `^I'. -v Display non-printing characters so they are visible. Control characters print as `^X' for control-X; the delete character (octal 0177) prints as `^?'. Non-ASCII characters (with the high bit set) are printed as `M-' (for meta) followed by the character for the low 7 bits.
答案3
差异可能是由 DOS 与 UNIX 行结尾或类似原因引起的吗?
如果你是hexdump
他们呢?这可能会更明显地显示差异,例如:
hexdump -C file1 > file1.hex
hexdump -C file2 > file2.hex
diff file1.hex file2.hex
答案4
其他答案足够完整,但提供了明确显示某种看不见的差异的方法。然而,还有另一种选择:忽略这些差异,这些差异在某种程度上并不重要。在某些情况下,了解这些差异并没有什么用处。
diff
命令有一些与此相关的有用选项:
--strip-trailing-cr
strip trailing carriage return on input
-B, --ignore-blank-lines
ignore changes where lines are all blank
-Z, --ignore-trailing-space
ignore white space at line end
就我个人而言,我发现--strip-trailing-cr
很有用,特别是在大型项目上使用-r
(ie --recursive
) 选项时,或者当 Git 的core.autocrlf
不是false
(即是true
或input
)。
有关这些选项的更多信息以及更多信息,请参阅它的手册页(或通过man diff
)。
笔记:使用这些选项会影响获取结果的性能,尤其是在文件/目录很大的情况下。在我自己的一个案例中,它将操作时间从0.321s
增加到0.422s
。