Wie färbt man die Ausgabe von Git ein?

256

Gibt es eine Möglichkeit, die Ausgabe für git (oder einen beliebigen Befehl) einzufärben?

Erwägen:

baller@Laptop:~/rails/spunky-monkey$ git status
# On branch new-message-types
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   app/models/message_type.rb
#
no changes added to commit (use "git add" and/or "git commit -a")
baller@Laptop:~/rails/spunky-monkey$ git add app/models

Und

baller@Laptop:~/rails/spunky-monkey$ git status
# On branch new-message-types
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   app/models/message_type.rb
#

Die Ausgabe sieht gleich aus, die Informationen sind jedoch völlig anders: Die Datei wurde von "nicht bereit" auf "Bereit für Festschreibung" geändert.

Gibt es eine Möglichkeit, die Ausgabe einzufärben? Beispielsweise sind nicht bereitgestellte Dateien rot, bereitgestellte grün?

Oder sogar Changes not staged for commit:zu rot und # Changes to be committed:zu grün?

Arbeiten in Ubuntu.

EDIT: googeln diese Antwort gefunden , die funktioniert gut: git config --global --add color.ui true.

Gibt es jedoch eine allgemeinere Lösung für das Hinzufügen von Farbe zu einer Befehlsausgabe?

B Sieben
quelle
1
Sie möchten etwas, das alle Befehlsausgaben einfärbt? Wie würde es wissen, welche Teile zu färben sind?
Michael Mrozek
Ich denke, wenn es eine Möglichkeit gibt, es mit Regex zu konfigurieren: Jede Farbe könnte einen Start-Regex haben. Und es könnte einen Standardfarb-Regex geben, der alle Farben ausschaltet. Und wenn der Text "foo" erscheint, zeigen Sie ihn in einer bestimmten Farbe an ...
B Seven

Antworten:

268

Sie können [color]in Ihrem einen Bereich ~/.gitconfigmit zB folgendem Inhalt anlegen

[color]
  diff = auto
  status = auto
  branch = auto
  interactive = auto
  ui = true
  pager = true

Sie können auch genau steuern, was Sie auf welche Weise gefärbt haben möchten, z

[color "status"]
  added = green
  changed = red bold
  untracked = magenta bold

[color "branch"]
  remote = yellow

Ich hoffe, Sie haben damit angefangen. Und natürlich benötigen Sie ein Terminal, das Farbe unterstützt.

Marco
quelle
14
Ich denke, es könnte sich lohnen, git config --global color.ui auto (@Evgenys Antwort) an Ihre Spitze zu setzen ... Ich denke, das ist wahrscheinlich das, wonach die meisten Leute suchen. Ich habe beide hochgestuft ... Ich sage nur, zum Wohle des Internets, wie es hier kommt, denke ich, dass viele Leute nur diesen einfachen Einzeiler wollen. Umso besser, wenn sie es bekommen, plus Ihre zusätzliche Güte.
Msouth
Das hat bei mir perfekt funktioniert - in dem [color "status"]Abschnitt, den ich hinzugefügt habe branch = yellow.
Wayne Werner
3
Sie können auch den Abschnitt [color] zur
.git
Und Sie können einfach eine Konfigurationsvariable für einen einzelnen Aufruf eines git-Befehls festlegen
NeilG
220

Sie möchten wahrscheinlich verwenden

git config --global color.ui auto

Der autoTeil besagt, dass git nur versucht, Farben auf Terminals zu verwenden, die dies unterstützen, und dass Sie keine ANSI-Sequenzen erhalten, wenn Sie die Ausgabe von git-Befehlen beispielsweise in eine Datei umleiten. Das Setzen auf trueist dasselbe wie auto, und dies ist auch die Standardeinstellung seit Git 1.8.4.

Dies color.uiist eine Metakonfiguration, die alle verschiedenen color.*Konfigurationen enthält, die mit git-Befehlen verfügbar sind.

Dies wird ausführlich in erklärt git help config.

Evgeny
quelle
Können Sie den Unterschied zwischen color.ui true(worauf autodeutet das hin) und color.ui erklären always? Ich habe die Dokumentation gelesen, aber ich verstehe den Unterschied immer noch nicht.
Chharvey
19
git config --global color.ui auto
git config --global color.branch auto
git config --global color.status auto
Sakisk
quelle
Zu Ihrer Information, nur dies funktionierte für Git Version 1.5.2.1, andere Antworten nicht.
AbhiNickz
14

Die akzeptierte Antwort gibt die gebräuchlichste Lösung an. Wenn Sie die Konfiguration aus irgendeinem Grund nicht dauerhaft ändern müssen, können Sie die Konfiguration für einen einzelnen git-Befehl überschreiben:

git -c color.ui=always <usual git command and options>

Zum Beispiel:

git -c color.ui=always status
git -c color.ui=always diff

Getestet: Wird von Git 2.4.6 unterstützt, wird von Git 1.7.1 nicht unterstützt.

Weiler
quelle
2
Für alle anderen, die versuchen, Farbe zu bekommen, während sie lesswie ich hineinpaspeln, können Sie lessdie Farb-Escape-Zeichen über an das Terminal weiterleiten less -R.
xdhmoore
Wann wurde diese Funktion hinzugefügt?
Ondra Žižka
11
git config --global color.ui always
git config --global color.branch always
git config --global color.diff always
git config --global color.interactive always
git config --global color.status always
git config --global color.grep always
git config --global color.pager true
git config --global color.decorate always
git config --global color.showbranch always
mlibre
quelle
1

Sie können dies mit Arbitrary Command Output Colourer tun . Meistens funktioniert es, aber ich habe nicht herausgefunden, wie man einen Fehler umgeht, bei dem Eingabeaufforderungen, die Eingaben erwarten, nicht angezeigt werden und Sie nicht einfach die bekanntermaßen erforderliche Eingabe eingeben und die Eingabetaste drücken können, um in jedem Fall fortzufahren.

Beispiel ~/.acoc.conffür git:

# git
[git/ae]
/.*(error:.*)/                                    red+bold
/.*(warning:.*)/                                  yellow
/.*(hint:.*)/                                     magenta
/.*(up-to-date).*/                                green+bold
/.*(nothing to commit).*/                         green
/^(\+.*)/                                         green
/^(-.*)/                                          red

..was funktioniert gut zusammen mit alias git="acoc git"in .bash_profile.

Tom Mahoney
quelle
Kannst du deine Konfiguration für teilen acoc?
Greg Dubicki
Nvm, es war einfach zu schreiben. :) Zur Antwort hinzugefügt.
Greg Dubicki
1

Für eine farbige git diffLeitung lessfunktioniert dies wie folgt:

git -c color.diff=always diff [...] | less -R
jox
quelle
0

Ich weiß, dass der Posten vier Jahre alt ist, aber niemand aus meinem Lager hat geantwortet, der Farbenblinde. Wenn Sie Farben unterscheiden können, ignorieren Sie meinen Beitrag.

"git status" zum Beispiel gibt Text aus, der weiß auf Hintergrund / schwarz auf weißem Hintergrund (lesbar), dunkelgrau zum Löschen (unlesbar vor schwarzem Hintergrund, aber lesbar vor weißem Hintergrund) und mittelgrau zum Hinzufügen (Gerste lesbar auf schwarz) ist Hintergrund, auf weißem Hintergrund unleserlich). Früher habe ich den Hintergrund meines Terminalfensters auf / von Weiß / Schwarz umgeschaltet, damit ich den unlesbaren Text lesen konnte. Eine einfache Lösung ist mehr:

 git status | more

Dadurch wird der gesamte Text in einem Standardterminalfenster mit weißem oder schwarzem Hintergrund lesbar.

Jan David Narkiewicz
quelle
1
Sie können die Konfiguration auch so ändern, dass standardmäßig keine Farbe festgelegt wird ( color.ui = never).
Der Kerl mit dem Hut
0

oder schalte alle / die meisten Farben aus über:

git config --global color.ui false
git config --global color.branch false
git config --global color.diff false
git config --global color.interactive false
git config --global color.status false
git config --global color.grep false
git config --global color.pager false
git config --global color.decorate false
git config --global color.showbranch false
theRiley
quelle
OP war nicht auf der Suche drehen aus Farben, eher drehen auf Farben. Im OP gab er an, wie er vorgehen soll, gitund wollte, dass dies in einem globaleren Sinne geschieht. Wenn Sie eine solche Methode kennen, bearbeiten Sie bitte Ihre Antwort, um dies zu erklären.
Gypsy Spellweaver
manchmal suchen die menschen etwas eng verwandtes, aber etwas anderes - aber danke für die ablehnung.
TheRiley
Ich mochte es @theRiley
Richard Lindhout