web-dev-qa-db-fra.com

Couleur dans git-log

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

J'ai également les éléments suivants dans mon gitconfig:

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

Comment reproduisez-vous ces couleurs lorsque vous effectuez un format personnalisé comme le suivant?

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

Depuis 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.

À partir de notes de version :

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

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

  • le HEAD en cyan
  • les branches éloignées en rouge
  • l'étiquette en vert

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

Mais les git log --format n'offrent pas un moyen d'afficher spécifiquement les HEAD ou télécommandes ou branche: tous les trois sont affichés via %d, avec une seule couleur possible.


Mise à jour de mai 2013, comme mentionné ci-dessous par Elad Shahar (voté), 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'objet de validation court), etc. pour la sortie des bornes.

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

Cela vient en plus du précédent 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 branche.
Voir commit 5ee8758 par Junio ​​C Hamano (gitster) :

log --decorate: Ne faites pas couler la couleur "commit" dans l'élément suivant

Dans "git log --decorate", Vous verriez l'en-tête de validation comme ceci:

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

où "commit ... (" est peint en color.diff.commit, "HEAD" en color.decorate.head, "," en color.diff.commit , le nom de la branche dans color.decorate.branch puis la fermeture de ")" dans color.diff.commit.

Si vous vouliez peindre le HEAD et le nom de la branche locale dans 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), tu ne voudrais 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 vous attendriez naïvement

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

au travail, mais malheureusement ce n’est pas le cas.
Il peint la chaîne "HEAD" et le nom de la branche dans la même couleur que la parenthèse ouvrante ou la virgule 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 commit 429ad2 par Junio ​​C Hamano (gitster) , 13 mai 2015.
(Fusionné par Junio ​​C Hamano - gitster - in commit fd7078 , 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 à la pointe de la branche actuelle, par exemple "HEAD -> master", Ne fonctionnait pas avec --decorate = full.


Git 2.9.x + (Q3 2016) corrigera un autre bug et honorer color=auto Pour %C(auto)


Git 2.10.2 (octobre 2016) corrige d'autres bogues avec commit 82b83da (29 sept. 2016), et commit c99ad27 (17 sept. 2016) par René Scharfe (``) .
(Fusionné par Junio ​​C Hamano - gitster - in commit 76796d4 , 28 octobre 2016)

pretty: évitez d'ajouter 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'attribut pour %C(auto) pour nous assurer que la coloration automatique est affichée comme prévu.
Arrêtez de faire cela si le strbuf de sortie est vide , c'est-à-dire lorsque %C(auto) apparaît au début de la chaîne de formatage , car alors 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 attributs

Réinitialisez les couleurs et les attributs sur %C(auto) pour permettre un contrôle automatique complet sur eux; sinon, les attributs comme gras ou inversé pourraient toujours être en vigueur à partir des espaces réservés %C précédents .

57
VonC

Entre parenthèses:

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

Donc %C(yellow reverse) fonctionnerait.

9
Josh Lee

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

8
Henrik Gustafsson

Certains voudront peut-être utiliser ceci: %C(colorname) Cela n'a pas besoin de changer la configuration des couleurs.

Exemple: colorier le nom de l'auteur en jaune

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

Les couleurs ANSI régulières devraient fonctionner https://en.wikipedia.org/wiki/ANSI_escape_code

  • noir
  • rouge
  • vert
  • jaune
  • bleu
  • Magenta
  • cyan
  • blanc
1
NullPointerWizard