내 것과 동일해 보이는 두 개의 파일(후행 공백 및 개행 포함)이 있지만 diff에서는 여전히 서로 다르다고 말합니다. 나란히 비교해봐도 diff -y
선이 똑같아 보이네요. diff의 출력은 전체 2개 파일입니다.
원인이 무엇인지 아시나요?
답변1
이상해요.. 한번 해보실 cmp
래요? " " 옵션을 사용할 수도 있습니다 -b
.
cmp 매뉴얼 페이지- 두 파일을 바이트 단위로 비교합니다.
이것은 Unix/Linux의 장점 중 하나입니다. 도구가 너무 많습니다 :)
답변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
.