2012-05-14 10 views
51

W pracy mamy kilku programistów i nie mamy przewodnika po stylu kodu, a niektórzy programiści wciskają tabulatory, a niektórzy z 4 spacji (na szczęście nikt nie wcina ze spacjami ludzie używają innych niż 4 pola). Generalnie nie jest to (duży) problem, ponieważ w naszych edytorach ustawiamy tabwidth=4, a wszystkie wcięcia wydają się poprawne.ustawienie tabwidth do 4 w git show/git diff

Ale w git diff lub git show to, co pojawia się:

diff --git a/mesclatabs.php b/mesclatabs.php 
new file mode 100644 
index 0000000..1986c91 
--- /dev/null 
+++ b/mesclatabs.php 
@@ -0,0 +1,5 @@ 
+<?php 
+function foo() { 
+  echo "line with 1 tab\n"; 
+ echo "line with 4 spaces\n"; 
+} 

Problemem jest git diff lub git show gdzie każdy zakładki pojawia się szeroki jak 8 spacji (dobrze, w rzeczywistości pojawia się jako zakładki, a powłoki (bash w moim przypadku) pokazuje zakładkę jako 8 spacji. Przypuszczam, że musi być jakaś konfiguracja bash, aby to zmienić, ale chciałbym wiedzieć, czy git ma opcję wyprowadzania kart jako 4 spacje w diff/show, jak niektórzy programiści pracować z zsh zamiast z bash.

Jakieś pomysły?

+3

W idealnym świecie wszyscy deweloperzy używają spacji i nie będziesz mieć takich głupich rzeczy. – sashang

+3

Całkowicie się nie zgadzam. Dlaczego miałbyś reprezentować coś z 4 znakami, kiedy możesz reprezentować go za pomocą 8? –

Odpowiedz

82

wierzę git config --global core.pager 'less -x1,5'

referencyjny: git-scm chp7-1

+2

Argumentem less powinno być "-x5", ponieważ symbole +/- ujednoliconego diff nie wpływają na położenie tab-stop, ale * * * przesuwają wszystkie spacje o jeden znak w prawo. Przydział tabulatora wynoszący 5 odpowiednio wyrównuje wszystko. –

+0

tak, to działa, ustawienie '-x5' jako CodeGnome powiedział. Bardzo dziękuję –

+0

urgh, działało tylko na pierwszym poziomie wcięcia, na drugim, trzecim, ... nie wyrównuje się z powodu początkowego + w różnicach. Zostawię na "-x4", ponieważ ustawienie go wyżej powoduje przesunięcie go o jeden znak więcej na każdym poziomie wcięcia (a także na liniach nie dodanych/usuniętych jest bardziej spójny). –

2

jako odpowiedź https://stackoverflow.com/a/10584237/1850340 nie działa dla mnie z powodu moich ustawień kolorów wymyśliłem następujące rozwiązanie:

TAB=$'\t' && git config --global core.pager "sed 's/$TAB/ /g' | less" && unset TAB 

Zastępuje wszystkie zakładki znaki z 4 spacji przed wyświetleniem go z mniejszą ilością. (Obejście TAB jest potrzebne, aby ominąć ucieczkę łusek muszli).