webentwicklung-frage-antwort-db.com.de

Farbe im Git-Log

Wenn Sie git log --decorate --pretty=oneline Ausführen, enthält die Ausgabe Einträge wie (HEAD, refs/published/master, master) Mit Farbgebung.

Ich habe auch die folgenden in meiner gitconfig:

[color "branch"]
    current = yellow reverse
    local = yellow
    remote = green

Wie replizieren Sie diese Farben, wenn Sie ein benutzerdefiniertes Format wie das folgende ausführen?

git log --decorate --stat --graph --pretty=format:"%d %Cgreen%h%Creset (%ar - %Cred%an%Creset), %s%n"
102
NorthIsUp

Ab Version 1.8.3 (24. Mai 2013) können Sie %C(auto) verwenden, um %d In der Formatzeichenfolge von git log Zu dekorieren.

Aus dem Versionshinweise :

 * "git log --format" specifier learned %C(auto) token that tells Git
   to use color when interpolating %d (decoration), %h (short commit
   object name), etc. for terminal output.)
83
Elad Shahar

Das git log --decorate Wird standardmäßig gesetzt:

  • das HEAD in cyan
  • die entfernten Zweige in rot
  • der tag in grün

und kann durch color.decorate config geändert werden.

Aber das git log --format bietet keine Möglichkeit, speziell den Zweig HEADoder remotes oder anzuzeigen: Alle drei werden durch %d angezeigt, wobei eine Farbe möglich ist.


Update Mai 2013, wie nten erwähnt von Elad Shahar (aktualisiert), bietet Git 1.8.3 eine weitere Option:

git log –format Hat jetzt einen %C(auto) Token, der Git anweist, beim Auflösen von %d (Dekoration), %h (Kurzer Commit-Objektname) usw. Farbe zu verwenden. für Terminalausgang.

In diesem Atlassian-Blogpost Kommentar wird darauf hingewiesen, dass diese Funktion Teil mehrerer anderer ist, die sich auf Format (git rebase, git count-objects) Und Farben (git branch -vv) Konzentrieren.

Dies kommt zum vorherigen auto,reset Von 1.8.2 hinzu, das Farben automatisch deaktiviert, wenn die Ausgabe nicht für ein Terminal1 verwendet wird

%C(auto,blue)Hello%C(auto,reset)

Hinweis: Mit git 2.4+ (Q2 2015) können Sie die Farben für Zweignamen besser zurücksetzen.
Siehe commit 5ee8758 von Junio ​​C Hamano (gitster) :

log --decorate: Keine "Commit" -Farbe in das nächste Objekt lecken

In "git log --decorate" Sehen Sie den Commit-Header wie folgt:

commit ... (HEAD, jc/decorate-leaky-separator-color)

wobei "commit ... (" in color.diff.commit, "HEAD" in color.decorate.head, "," in color.diff.commit geschrieben ist Geben Sie den Zweignamen in color.decorate.branch ein und schließen Sie dann ")" in color.diff.commit.

Wenn Sie den Namen HEAD und den Namen der lokalen Verzweigung in derselben Farbe wie der Nachrichtentext zeichnen möchten (möglicherweise, weil Cyan und Grün auf einem Schwarz-Weiß-Terminal zu schwach sind, um lesbar zu sein), du würdest nicht sagen müssen wollen

[color "decorate"]
    head = black
    branch = black

weil Sie nicht in der Lage wären, dieselbe Konfiguration auf einem Weiß-auf-Schwarz-Terminal wiederzuverwenden. Sie würden naiv erwarten

[color "decorate"]
    head = normal
branch = normal

zu arbeiten, aber leider nicht.
Der String "HEAD" und der Zweigname werden in derselben Farbe wie die öffnende Klammer oder das Komma zwischen den Dekorationselementen gezeichnet.
Dies liegt daran, dass der Code vergisst, die Farbe zurückzusetzen, nachdem das "Präfix" in seiner eigenen Farbe gedruckt wurde.


Beachten Sie, dass Git 2.5 (Q2 2015) einen Fehler behebt:

Siehe commit 429ad2 von Junio ​​C Hamano (gitster , 13. Mai 2015.
(Zusammengeführt von Junio ​​C Hamano - gitster - in Commit fd7078 , 22. Mai 2015)

log: Dekorationsnamen nicht zu früh kürzen

Die Verbesserung "log --decorate" In Git 2.4, die das Festschreiben an der Spitze des aktuellen Zweigs anzeigt, z. "HEAD -> master" Funktionierte nicht mit --decorate = full.


Git 2.9.x + (3. Quartal 2016) behebt einen weiteren Fehler und Ehre color=auto Für %C(auto)


Git 2.10.2 (Okt. 2016) behebt andere Fehler mit commit 82b83da (29. September 2016) und commit c99ad27 (17. September 2016) von René Scharfe) (``) .
(Zusammengeführt von Junio ​​C Hamano - gitster - in Festschreiben 76796d4 , 28. Oktober 2016)

pretty: Vermeiden Sie das Hinzufügen von Zurücksetzen für %C(auto), wenn die Ausgabe leer ist

Wir geben eine Escape-Sequenz zum Zurücksetzen von Farbe und Attribut für %C(auto) aus, um sicherzustellen, dass die automatische Färbung wie beabsichtigt angezeigt wird.
Unterbrechen Sie dies, wenn der Ausgabestring leer ist , dh wenn %C(auto) am Anfang des Formatierungsstrings erscheint , weil dann kein Reset nötig ist und wir ein paar Bytes in der Ausgabe sparen.

pretty: lass %C(auto) alle Attribute zurücksetzen

Setzen Sie die Farben zurück nd Attribute auf %C(auto), um die vollständige automatische Kontrolle über sie zu ermöglichen. ansonsten könnten Attribute wie fett oder umgekehrt von früheren %C - Platzhaltern noch wirksam sein.

57
VonC

Setzen Sie sie in Klammern:

%C(...): color specification, as described in color.branch.* config option

Also würde %C(yellow reverse) funktionieren.

9
Josh Lee

Die Konfigurationsoption log.decorate kann Standarddekorationen in Protokollen aktivieren/deaktivieren.

git config --global log.decorate full

Sobald dies erledigt ist, können Sie color.decorate.* um mit den farben zu spielen

8

Einige möchten dies möglicherweise verwenden: %C(colorname) Dies muss die Farbkonfiguration nicht ändern.

Beispiel: Den Autorennamen gelb färben

--pretty=format:"%C(yellow)%an%Creset"

Normale ANSI-Farben sollten funktionieren https://en.wikipedia.org/wiki/ANSI_escape_code

  • schwarz
  • rot
  • grün
  • gelb
  • blau
  • Magenta
  • cyan
  • weiß
1