Einstellen der Tabbreite auf 4 in Git Show / Git Diff

70

Bei der Arbeit sind wir mehrere Entwickler und haben keinen Code-Style-Guide. Einige Entwickler rücken mit Tabulatoren ein, andere mit 4 Leerzeichen (zum Glück verwendet niemand, der Einrückungen mit Leerzeichen verwendet, andere als 4 Leerzeichen). Im Allgemeinen ist dies kein (großes) Problem, da wir in unseren Editoren festlegen tabwidth=4und alle Einrückungen korrekt erscheinen.

Aber in git diffoder so git showerscheint es:

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";
+}

Das Problem ist git diffoder git showwo jede Registerkarte so breit wie 8 Leerzeichen erscheint (nun, in Wirklichkeit erscheint sie als Registerkarte, und die Shell (in meinem Fall Bash) zeigt die Registerkarte als 8 Leerzeichen an. Ich nehme an, es muss eine Bash-Konfiguration geben, um sie zu ändern Dies, aber ich würde gerne wissen, ob Git eine Option hat, Tabulatoren als 4 Leerzeichen in diff/ auszugeben show, da einige Entwickler mit zshstatt arbeiten bash.

Irgendwelche Ideen?

Carlos Campderrós
quelle
5
In einer idealen Welt würden die Entwickler alle Leerzeichen verwenden und Sie werden keine dummen Probleme wie diese haben.
Sashang
4
Ich bin völlig anderer Meinung. Warum würden Sie etwas mit 4 Zeichen darstellen, wenn Sie es mit 8 darstellen können?
Matthew G
Natürlich kenne ich Ihre Situation nicht, aber ich würde wirklich auf einige super-grundlegende Codierungsrichtlinien drängen, vielleicht nur auf die Tabulatoren / Leerzeichen. Keine Tabulatoren klingen nach einer guten Idee, da die Leute dann dazu neigen, Tabulatoren zu verwenden, um ihre Kommentare und dergleichen auszurichten, und es wird zu einem Chaos ... Und das Einfügen von Tabulatoren nach Leerzeichen ... Es ist verwirrend, wenn ich zum Bearbeiten gehe und ich kann Ich sehe nicht, was eine Registerkarte und was ein Leerzeichen ist (daher mache ich Registerkarten immer in meinem Editor sichtbar). Ich bin ein bisschen neurotisch, also </ Meinung>
Neal Gokli
Ich denke auch, dass es möglich ist, (nur) Tabulatoren konsistent zum Einrücken von Code und Leerzeichen für jede andere Ausrichtung zu verwenden, und dann können die Leute den Tabstop nach Belieben ändern. Ich kann mir allerdings nicht vorstellen, dass die Leute konsequent genug sind!
Neal Gokli
@MatthewG 8 klingt viel größer als meine 2 ... Danke, dass du mir das Licht gezeigt hast! : D
Neal Gokli

Antworten:

113

Ich glaube git config --global core.pager 'less -x1,5'

Verweise:

Codemonkee
quelle
5
Das Argument für weniger sollte es sein , -x5da die +/- Symbole des Standard - Diff nicht die Position des tab-stop auswirken, aber sie tun alle Räume ein Zeichen nach rechts schieben. Ein Tabulator von 5 richtet alles richtig aus.
Todd A. Jacobs
1
Wie kann man Platz in reparieren git --color=always | less -r? less -x1,5ist ungültig
Zheng Kai
2
@ZhengKai: Genau wie ein Datenpunkt habe lessich als alias less -R, core.pager wie oben definiert, und ich laufe git diff --color-words- alles funktioniert gut und die Tabulatorbreite ist korrekt. Vielleicht hilft das?
Coderer
4
Wenn ich das tue, wird git add -pder Pager nicht verwendet und die Registerkarte wird falsch angezeigt. Wenn Sie beschreiben, wie Sie dies ebenfalls beheben können. dann ist die Antwort voll
Eugen Konkov
7
Für diejenigen, die sich fragen, steht in -x1,5der 1 für die führende Spalte in der Diff-Ausgabe (die +, - und ein Leerzeichen enthält). Nachfolgende Registerkarten springen dann zu den Spalten 5, 9, 13, 17 usw. - auch bekannt als 1 + Vielfache von 4. Für git diff ist also definitiv das richtige Argument -x1,5. Die Leute, die oben behaupten, dass -x5das für sie funktioniert ... nun - das ist eine Tabulatorbreite von 5 Leerzeichen ohne führende Spalte, hmm. Unwahrscheinlich?
Carlo Wood
3

Da die Antwort https://stackoverflow.com/a/10584237/1850340 aufgrund meiner Farbeinstellungen bei mir nicht funktionierte, habe ich folgende Lösung gefunden:

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

Dadurch werden alle Tabulatorzeichen durch 4 Leerzeichen ersetzt, bevor sie mit weniger angezeigt werden. (Die TAB-Problemumgehung wird benötigt, um das Backslash-Entweichen der Shells zu umgehen.)

Adius
quelle
Ich bin nicht auf etwas, mit dem ich testen kann, aber würde dies hier less -Rins Spiel kommen? um die ANSI-Farb-Escape-Sequenzen durchzulassen, im Gegensatz zu less -r?
Codemonkee