git-diff 출력의 공백 색칠


151

코드 형식과 관련하여 나는 순수 주의자입니다 :). 나는 종종 불필요한 공백을 제거합니다 (줄 끝에 ws, ws 만있는 줄 등). 나는 심지어 vim을 그 종류의 선이 빨간색으로 표시되도록 설정했습니다.

내 문제는 git-diff를 사용하면 종종 다음과 같은 것을 볼 수 있다는 것입니다.

-      else{ 
+      else{

git-diff 색상을 사용하더라도 차이를 볼 수 없습니다 (특정 상황에서 줄 끝에서 1 ws를 제거했습니다). git-diff에게 ws가 빨간색으로 표시되도록 지시하는 방법이 있습니까? (예 : / \ s + $ / regexp와 일치하는 항목).


4
색상을 반전 시키면 (전면 및 배경 교체) 이와 같이 공백이 변경됩니다. 많은 터미널에서이 작업을 수행하는 쉬운 방법은 마우스로 문제의 텍스트를 강조 표시하는 것입니다. 이 트릭은 물론 컬러 차이로만 작동합니다.
Phlarx

답변:


172

다음과 같이 color.diff.whitespace 구성 설정을 설정해야 할 수도 있습니다.

 git config color.diff.whitespace "red reverse"

( 어쨌든 컬러 패치가 표시된다고 말한 이래로 이미 설정 color.diff했거나 color.ui설정 했다고 가정 합니다.)autogit diff

빨간색으로 강조 표시된 공백 오류 유형을 미세 조정하려면 change를 변경할 수 core.whitespace있지만 blank-at-eol기본적으로 활성화되어 있으므로 언급 한 예제에서이를 변경할 필요가 없습니다.

혼동의 원인은의 출력 git diff에서 공백 오류는 제거 된 것이 아니라 도입 된 행에서만 강조 표시된다는 것입니다. ( 업데이트 : Paul Whittaker 가 자신의 답변에서 지적한대로 투표해야합니다 git diff -R.)로 diff의 의미를 반대로 바꾸면 이러한 내용을 볼 수 있습니다 .

git config 매뉴얼 페이지 에서 이러한 구성 옵션에 대한 추가 설명서를 찾을 수 있습니다

-Rkludge 를 사용하지 않으려면 diff man page 에서 WhiteSpace Error Highlight 옵션을 사용할 수 있습니다 .

--ws-error-highlight =

color.diff.whitespace로 지정된 색상으로 지정된 행에서 공백 오류를 강조 표시하십시오. 쉼표로 구분 된 오래된 새 컨텍스트 목록입니다. 이 옵션을 지정하지 않으면 새 줄의 공백 오류 만 강조 표시됩니다. 예를 들어 --ws-error-highlight = new, old는 삭제 된 행과 추가 된 행에서 공백 오류를 강조 표시합니다. 모두 오래되고 새로운 맥락의 속기로서 사용될 수 있습니다.

git diff --ws-error-highlight=new,old <file>

또는

git diff --ws-error-highlight=all <file>

이 기능을 영구적으로 켜고 별칭을 사용하지 않고 구성에 저장하는 방법을 모르겠습니다.

git config alias.df 'diff --ws-error-highlight=all'

이제 다음을 사용할 수 있습니다.

git df <file>

빨간색으로 변경 사항을 보려면

참고 힘내 2.11 (Q4 2016) ,이 별명으로 대체 될 수 있습니다 :

git config diff.wsErrorHighlight all

doc ongit diff and on을git config 참조하십시오 .


34
"혼란의 원인은 git diff의 출력에서 ​​공백 오류는 제거 된 것이 아니라 도입 된 행에서만 강조된다는 것입니다." 바로 그거죠! 그리고 제거 된 줄에도 표시 할 수있는 방법이 없습니까? (이봐, diff :))
radarek

6
~ / .gitconfig
simlmx

17
@radarek : 반대 옵션을 사용할 수 있습니다 :git diff -R
blueyed

6
이것에 대한 버그 리포트가 있습니까? 그렇지 않으면 있어야 할 것 같습니다.
Ajedi32

3
이것은 효과가 있었다 git config diff.wsErrorHighlight all. git config --global [...]전체 변경 사항을 작성하는 데 사용하십시오 (즉, 모든 저장소에 영향을 미침).
Felipe Alvarez

141

git diff -R제거 된 줄을 추가 된 줄로 바꾸는 데 사용 합니다. 그런 다음 후행 공백이 강조 표시됩니다.

(이것은 Mark의 답변의 색상 설정에 따라 이미 공백 하이트 라이팅이 활성화되어 있다고 가정합니다.이 방법에 대한 크레딧은 Junio의 게시물 http://git.661346.n2.nabble.com/Highlighting-whitespace-on-removal- with-git-diff-td5653205.html )

예를 들어, 파일을 DOS 줄 끝에서 Unix로 변환 할 때 줄 끝에 나타나는 문자 (dis)가 git diff -R명확하게 표시 ^M됩니다. 없는 경우 -R(또는없는 경우 -w등) 전체 파일이 변경되었음을 보여 주지만 방법은 표시하지 않습니다.


4
물론 git diff | cat -A | less -S필사적 인 경우 에도 수행 할 수 있지만 캐리지 리턴 외에도 cat색상 강조 표시 이스케이프 코드가 그대로 표시됩니다.
Paul Whittaker

3
@Paul_Whittaker cat -A는 휴대 할 수 없습니다. BSD cat에는 그러한 옵션이 없습니다. cat -vet대신 사용하십시오 .
7heo.tk

9

사용하십시오 git diff --color | less -R. 이는 -R색상 제어 코드를 인간 친화적으로 만듭니다.

그런 다음 less의 정규 표현식 검색을 사용할 수 있습니다.

/[[:space:]]+$

그런데이 정규 표현식도 작동합니다 vim.
Jose Alban

이 마지막 아이디어는 less -R내가 쉽게 파이프를 ls --color통과 할 수있게 해주었다 less.
Menachem

0

내 버전은 git diff이미이 작업을 수행하는 것 같습니다-git 1.7.4.1이 있고 설정했습니다 color.ui = auto.


12
방금 git 1.7.5.1로 테스트했으며 제거되는 줄에서 후행 공백을 강조 표시하지 않습니다.
침 투자
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.