guide/whitespace-options.md

공백 무시 옵션 차이 — diff -b, -w, -B, -Z 와 git 대응

줄 끝 공백 무시, 공백 양 무시(-b), 모든 공백 무시(-w), 빈 줄 무시(-B), 대소문자 무시의 정확한 차이를 GNU diff·git 옵션과 예제로 비교합니다.

최종 수정: 2026-09-23

두 파일이 "내용은 같은데" diff 가 잔뜩 나오는 경우의 상당수는 공백 때문입니다. 편집기가 줄 끝 공백을 지웠거나, 탭을 스페이스로 바꿨거나, 들여쓰기 폭을 바꿨을 때입니다. diff 도구는 이런 차이를 무시하는 옵션을 제공하지만, 옵션마다 무시하는 범위가 다르므로 정확히 알고 써야 합니다.

GNU diff 의 공백 관련 옵션

옵션긴 이름무시하는 것
-Z--ignore-trailing-space줄 끝의 공백
-E--ignore-tab-expansion탭을 스페이스로 펼친 것과의 차이
-b--ignore-space-change공백의 의 변화, 줄 끝 공백
-w--ignore-all-space모든 공백
-B--ignore-blank-lines빈 줄만 추가·삭제된 변경
-i--ignore-case대소문자
--strip-trailing-cr입력 줄 끝의 CR 문자

git diff 의 대응 옵션

git 문서의 설명은 다음과 같습니다.

-b 와 -w 의 결정적 차이

두 옵션을 혼동하는 경우가 많습니다. 핵심은 "공백이 있다/없다"를 구분하느냐입니다.

왼쪽오른쪽-b (공백 양 무시)-w (모든 공백 무시)
a ba b같음같음
a bab다름같음
x = 1x=1다름같음
if (a) + 줄 끝 공백if (a)같음같음
탭 1개 들여쓰기스페이스 4개 들여쓰기같음같음

-b 는 공백 덩어리를 한 칸으로 줄여 보는 것이고, -w 는 공백을 전부 지우고 보는 것입니다. 그래서 -wx = 1x=1, 심지어 int ainta 도 같게 봅니다.

들여쓰기가 의미를 갖는 경우의 위험

파이썬, YAML, Makefile 처럼 들여쓰기가 문법인 파일에서는 공백 무시 옵션이 실제 변경을 숨길 수 있습니다.

if ready:
    start()
    notify()
if ready:
    start()
notify()

두 번째에서는 notify() 가 if 문 밖으로 나가 동작이 달라졌지만, -w 로 비교하면 공백이 전부 지워지므로 차이가 사라집니다. -b 는 줄 앞 공백이 "있음"에서 "없음"으로 바뀐 것이므로 차이로 잡습니다. 하지만 들여쓰기가 4칸에서 8칸으로 바뀌어 코드가 한 단계 안쪽 블록으로 들어간 경우에는 공백의 만 달라진 것이라 -b 에서도 보이지 않습니다.

확실한 방법은 들여쓰기가 중요한 파일은 공백 옵션을 끄고 비교하는 것입니다. 공백 옵션은 "정리만 한 변경인지 확인"하는 용도로 쓰고, 최종 확인은 옵션 없이 하는 습관이 안전합니다.

빈 줄 무시(-B)의 범위

-B 와 git 의 --ignore-blank-lines빈 줄만으로 이루어진 변경을 숨깁니다. 빈 줄 추가가 다른 실제 변경과 같은 헌크에 섞여 있으면 그 빈 줄은 그대로 표시될 수 있습니다. 문단 사이 빈 줄 개수를 바꾼 문서, 코드 포매터가 함수 사이 빈 줄을 조정한 경우에 유용합니다.

이 사이트의 옵션과 대응표

이 사이트가까운 GNU diff가까운 git diff
공백: 그대로 비교(옵션 없음)(옵션 없음)
공백: 줄 끝 공백 무시-Z--ignore-space-at-eol
공백: 공백 양 무시-b-b
공백: 모든 공백 무시-w-w
대소문자 무시-i(해당 없음)
빈 줄 무시-B 와 비슷(빈 줄을 비교에서 제외)--ignore-blank-lines 와 비슷
줄 끝 정규화--strip-trailing-cr + 마지막 줄바꿈 무시--ignore-cr-at-eol 와 비슷

이 사이트의 "빈 줄 무시"는 빈 줄을 아예 비교 대상에서 빼고, 흐린 색으로만 표시합니다. 또 무시 옵션은 줄 안 하이라이트에도 적용되어, 공백 양 무시를 켜면 공백 칸 수만 다른 부분은 강조하지 않습니다.

이 도구에서 해 보기

텍스트 비교기에 위 표의 예를 넣고 공백 옵션을 하나씩 바꿔 보면 차이가 바로 보입니다. 줄 끝의 CR 이나 파일 끝 줄바꿈 같은 "보이지 않는 차이"는 줄 끝 문자와 보이지 않는 차이에서, 결과를 patch 로 읽는 방법은 unified diff 읽는 법에서 이어서 볼 수 있습니다.

텍스트 비교하러 가기