두 입력의 차이를 줄 단위로 보여 줘
diff a b는 첫 번째 입력과 두 번째 입력에서 달라진 줄을 찾아. 기본 형식은 오래된 편집 명령 모양이고, -u를 붙인 통합 diff는 Git과 코드 리뷰에서 널리 쓰여. diff는 차이를 설명할 뿐 어느 쪽이 옳은지 판정하지 않으므로 두 입력의 출처와 기대 상태는 사용자가 따로 알아야 해.
비교 목적에 맞는 옵션을 골라
-u: 앞뒤 문맥을 포함한 통합 형식으로 보여 줘.-r: 두 디렉터리를 재귀 비교해.-q: 자세한 줄 대신 차이가 있는지만 알려 줘.-i: 대소문자 차이를 무시해.-w: 공백 차이를 무시해.-B: 빈 줄 변화만 무시해.-y: 두 입력을 나란히 보여 줘.
무시 옵션은 노이즈를 줄일 수 있지만 실제 의미가 있는 차이까지 숨길 수 있으므로 원본 비교도 보존해.
통합 diff의 표식을 읽어
---와 +++는 비교한 두 파일을, @@ -10,4 +10,5 @@ 같은 hunk 헤더는 각 파일에서 표시하는 줄 범위를 뜻해. 본문에서 앞의 -는 첫 입력에만 있는 줄, +는 둘째 입력에만 있는 줄, 공백은 양쪽에 공통인 문맥 줄이야. 표식은 실제 파일 내용의 일부가 아니라 diff 형식의 메타데이터야.
차이를 패치 파일로 보관할 수 있어
diff -u old.txt new.txt > change.patch
patch < change.patch패치는 기준 파일의 내용과 줄 문맥이 기대와 맞을 때 적용돼. 적용 전에 대상 경로와 변경 방향을 확인하고, 버전 관리 저장소라면 작업 트리 상태와 patch의 dry-run 옵션을 먼저 살펴. 출처를 모르는 패치는 파일 변경 명령이라는 사실을 잊지 마.
코드 저장소에서는 Git 문맥을 활용해
git diff는 통합 형식을 바탕으로 스테이징 영역, 이름 변경과 저장소 경로 정보를 함께 보여 줘. delta 같은 도구는 사람이 읽기 쉽게 꾸미는 pager 계층이지 변경 의미를 새로 판정하는 엔진은 아니야. 디렉터리 두 개의 빠른 비교에는 diff -rq dir1 dir2가 유용하지만 누락, 권한 오류와 심볼릭 링크 처리도 함께 확인해.
정규화가 실제 차이를 지우지 않게 해
생성 시각, 정렬 순서와 줄바꿈처럼 비교 목적에 불필요한 변동을 먼저 정규화할 수 있어. 그러나 공백이나 순서가 의미 있는 형식에서는 같은 처리가 오류를 숨겨. 정규화 전 diff와 대표 표본을 보존하고, 왜 어떤 차이를 무시했는지 비교 계약에 기록해.
종료 상태를 세 경우로 나눠
일반적인 diff는 두 입력이 같으면 0, 다르면 1, 비교 자체가 실패하면 1보다 큰 값을 반환해. CI에서 1을 프로그램 장애로 취급하면 정상적인 “차이 발견”을 실패 실행으로 오해하고, 2를 단순 차이로 넘기면 읽기 오류를 숨길 수 있어. 자동화에서는 같음, 다름, 비교 실패를 각각 처리해.