Git-diff'in çıktısında beyaz boşluk boyama


151

Kod biçimlendirme konusunda ben biraz safım :). Sıklıkla gereksiz beyaz boşlukları kaldırırım (sadece ws içeren satırlar, satırların sonunda ws vb.). Hatta vim'i bu tür çizgileri kırmızıya gösterecek şekilde ayarladım.

Benim sorunum git-diff kullanarak sık sık böyle bir şey görmek:

-      else{ 
+      else{

Git-diff renkli olsa bile fark göremiyorum (bu durumda satır sonunda 1 ws kaldırdım). Git-diff'e ws'nin kırmızıya renkli olduğunu göstermenin bir yolu var mı? (örneğin / \ s + $ / regexp ile eşleşenler).


4
Renkleri ters çevirirseniz (ön ve arka planı değiştir), bunun gibi boşluk değişiklikleri görünecektir. Bunu birçok terminalde gerçekleştirmenin kolay bir yolu, söz konusu metni fare ile vurgulamaktır. Bu hile elbette sadece renkli bir farkla çalışır.
Phlarx

Yanıtlar:


172

Color.diff.whitespace yapılandırma ayarını ayarlamanız gerekebilir, örneğin:

 git config color.diff.whitespace "red reverse"

(Zaten renkli yamalar gördüğünüzü söylediğinizden beri zaten var olduğunuzu color.diffveya color.uiayarladığınızı varsayıyorum .)autogit diff

Kırmızıyla vurgulanan boşluk hatalarının türüne ince ayar yapmak isterseniz, daha sonra değiştirebilirsiniz core.whitespace, ancak blank-at-eolvarsayılan olarak etkindir, böylece bahsettiğiniz örnek için muhtemelen değiştirmeniz gerekmez.

Olası bir karışıklık kaynağı, çıkışında git diff, boşluk hatalarının kaldırılanlara değil, yalnızca girilen satırlarda vurgulanmasıdır. ( Güncelleme: Paul Whittaker'in cevabında belirttiği gibi , yukarı oy vermelisiniz :), farkın duygusunu tersine çevirerek bunları görebilirsiniz git diff -R.)

Bu yapılandırma seçenekleriyle ilgili daha fazla belgeyi git config man sayfasında bulabilirsiniz

-RKludge kullanmak istemiyorsanız , diff man sayfasındaki WhiteSpace Hata Vurgulama seçeneğini kullanabilirsiniz .

--ws-hatasız vurgulamak =

Color.diff.whitespace tarafından belirtilen renkte belirtilen satırlarda boşluk hatalarını vurgulayın. eski, yeni, bağlamın virgülle ayrılmış listesidir. Bu seçenek belirtilmediğinde, yalnızca yeni satırlardaki boşluk hataları vurgulanır. Örneğin --ws-error-vurgu = yeni, eski hem silinen hem de eklenen satırlardaki boşluk hatalarını vurgular. hepsi eski, yeni, bağlam için kısa el olarak kullanılabilir.

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

veya

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

Kalıcı olarak bu açmak ve bir takma ad kullanarak kenara yapılandırma saklamak için bir yol bilmiyorum:

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

Şimdi şunları kullanabilirsiniz:

git df <file>

Kırmızıdaki değişiklikleri görmek için.

Not Git 2.11 ile (Q4 2016) , bu takma adı ile değiştirilmesi olabilir:

git config diff.wsErrorHighlight all

Bkz Doktorugit diff ve üzerindegit config .


34
"Olası bir karışıklık kaynağı git diff'in çıktısında, boşluk hatalarının kaldırılanlara değil, yalnızca girilen satırlarda vurgulanmasıdır." Kesinlikle! Ve kaldırılan çizgiler için de bunu göstermenin bir yolu yok mu? (hey, fark var :))
radarek

6
~ / .Gitconfig
simlmx

17
@radarek: ters seçeneği kullanabilirsiniz:git diff -R
blueyed

6
Bunun için bir hata raporu var mı? Değilse, olması gerektiği gibi görünüyor.
Ajedi32

3
bu işe yaradı git config diff.wsErrorHighlight all. git config --global [...]Değişiklikleri genel yapmak için kullanın (yani tüm depoları etkiler).
Felipe Alvarez

141

git diff -RKaldırılan çizgileri eklenen çizgilere dönüştürmek için kullanın . Ardından sondaki boşluk vurgulanacaktır.

(Bu, Mark'ın cevabındaki renk ayarlarına göre zaten boşluk hightlighting'in etkin olduğunu varsayar. Bu yöntem için kredi, http://git.661346.n2.nabble.com/Highlighting-whitespace-on-removal- adresindeki Junio'nun postasına gider. ile-git-diff-td5653205.html .)

Örneğin, bir dosyayı DOS satır sonlarından Unix'e dönüştürürken satırların sonunda görünen karakterleri (dis) git diff -Raçıkça gösterir ^M. Olmadan -R(ve ayrıca olmadan -w) tüm dosyanın değiştiğini gösterir, ancak nasıl olduğunu göstermez.


4
Tabii ki, çaresizseniz de yapabilirsiniz git diff | cat -A | less -S, ancak satır başlarına ek olarak, catkelimenin tam anlamıyla kaçış kodlarını vurgulayan herhangi bir renk de görüntülenir.
Paul Whittaker

3
@Paul_Whittaker cat -Ataşınabilir değil. BSD kedisinde böyle bir seçenek yoktur. Lütfen cat -vetbunun yerine kullanın.
7heo.tk

9

Kullanın git diff --color | less -R. -RRenk denetim kodları insan dostu hale getirir.

Ardından, lessnormal ifade aramasını kullanabilirsiniz;

/[[:space:]]+$

Bu düzenli ifade vimbu arada da işe yarıyor .
Jose Alban

Bu son fikir less -Rbenim boru yapmamı kolaylaştırdıls --color aracılığıyla less.
Menachem

0

Benim versiyonum git diffzaten bunu yapıyor gibi görünüyor - Git 1.7.4.1 ve ayarladım color.ui = auto.


12
Sadece git 1.7.5.1 ile test ettim ve kesinlikle kaldırılmakta olan satırlardaki boşlukları vurgulamıyor.
Infiltrator
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.