Couleur dans git-log

Lorsque vous lancez git log --decorate --pretty=oneline la sortie aura des entrées comme (HEAD, refs/published/master, master) avec coloration.

J’ai aussi ce qui suit dans mon gitconfig:

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

Comment reproduisez-vous ces couleurs lorsque vous effectuez un format personnalisé comme celui-ci?

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

À partir de git 1.8.3 (24 mai 2013), vous pouvez utiliser %C(auto) pour décorer %d dans la chaîne de format de git log .

A partir des notes de publication :

  * "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.) 

Le git log --decorate mettra par défaut:

  • la tête en cyan
  • les twigs distantes en rouge
  • l’étiquette en vert

et peut être modifié par color.decorate config.

Mais git log --format pas de moyen pour afficher spécifiquement HEAD ou les télécommandes ou la twig: les trois sont affichés via %d , avec une couleur possible.


Mise à jour de mai 2013, comme mentionné ci-dessous par Elad Shahar (voté), le git 1.8.3 offre une option supplémentaire:

git log –format arbore désormais un jeton %C(auto) qui indique à Git d’utiliser la couleur lors de la résolution de %d (décoration), %h (nom d’object abrégé), etc. pour la sortie du terminal.

Cet article sur le blog Atlassian git rebase que cette fonctionnalité fait partie de plusieurs autres fonctions axées sur le format ( git rebase , git count-objects ) et les couleurs ( git branch -vv ).

Cela vient en plus de la précédente auto,reset de 1.8.2 , qui désactive automatiquement les couleurs lorsque la sortie n’est pas utilisée pour un terminal1

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

Remarque: git 2.4+ (Q2 2015) fera un meilleur travail de réinitialisation de la couleur autour des noms de twig.
Voir commit 5ee8758 par Junio ​​C Hamano ( gitster ) :

log --decorate : ne fuit pas la couleur “commit” dans l’élément suivant

Dans ” git log --decorate “, vous git log --decorate l’en-tête de validation comme ceci:

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

où ” commit ... ( ” est peint dans color.diff.commit , ” HEAD ” dans color.decorate.head , ” , ” dans color.diff.commit , le nom de la twig dans color.decorate.branch , puis fermeture ” ) “dans color.diff.commit .

Si vous voulez peindre le nom HEAD et la twig locale de la même couleur que le corps du texte (peut-être parce que le cyan et le vert sont trop pâles sur un terminal noir sur blanc pour être lisibles), vous ne voudriez pas avoir à dire

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

car vous ne pourriez pas réutiliser la même configuration sur un terminal blanc sur noir. Vous attendez naïvement

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

pour travailler, mais malheureusement, ce n’est pas le cas.
Il peint la chaîne ” HEAD ” et le nom de la twig dans la même couleur que la parenthèse ou la virgule d’ouverture entre les éléments de décoration.
En effet, le code oublie de réinitialiser la couleur après avoir imprimé le “préfixe” dans sa propre couleur.


Notez que git 2.5 (Q2 2015) corrige un bug:

Voir engagement 429ad20 de Junio ​​C Hamano ( gitster ) , 13 mai 2015.
(Fusion par Junio ​​C Hamano – gitster – dans commit fd70780 , 22 mai 2015)

log : ne raccourcissez pas les noms de décoration trop tôt

L’amélioration ” log --decorate ” dans Git 2.4 qui montre la validation à l’extrémité de la twig en cours, par exemple ” HEAD -> master “, n’a pas fonctionné avec –decorate = full.


Git 2.9.x + (Q3 2016) corrigera un autre bug et la color=auto honneur color=auto pour %C(auto)


Git 2.10.2 (oct. 2016) corrige d’autres bogues avec commit 82b83da (29 sept. 2016) et commit c99ad27 (17 sept. 2016) par René Scharfe (“) .
(Fusion par Junio ​​C Hamano – gitster – dans commit 76796d4 , 28 oct. 2016)

pretty : évite d’append une réinitialisation pour %C(auto) si la sortie est vide

Nous émettons une séquence d’échappement pour réinitialiser la couleur et l’atsortingbut pour %C(auto) pour vous assurer que la coloration automatique est affichée comme prévu.
Arrêtez de le faire si la sortie strbuf est vide , c’est-à-dire lorsque %C(auto) apparaît au début de la chaîne de format, car il n’y a pas besoin de réinitialisation et nous économisons quelques octets dans la sortie.

pretty : laissez %C(auto) réinitialiser tous les atsortingbuts

Réinitialiser les couleurs et les atsortingbuts sur %C(auto) pour permettre un contrôle entièrement automatique sur ceux-ci; Dans le cas contraire, des atsortingbuts tels que bold ou reverse peuvent toujours être appliqués à partir des espaces réservés %C précédents .

Les parenthèses:

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

Donc, %C(yellow reverse) fonctionnerait.

L’option de configuration log.decorate peut activer / désactiver les décorations par défaut dans les journaux.

 git config --global log.decorate full 

Une fois cela fait, vous pouvez utiliser color.decorate.* Pour jouer avec les couleurs