Couleur en git-log

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

j'ai aussi de la suite dans mon gitconfig:

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

comment répliquer ces couleurs en faisant un format personnalisé comme celui-ci?

git log --decorate --stat --graph --pretty=format:"%d %Cgreen%h%Creset (%ar - %Cred%an%Creset), %s%n"
93
demandé sur nulltoken 2011-05-05 01:07:00

4 réponses

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

De la 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.)
76
répondu Elad Shahar 2013-05-30 19:26:46

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

  • la tête à cyan
  • les branches éloignées en rouge
  • l'étiquette en vert

et peut être modifié par le biais de color.decorate config.

mais le git log --format n'offrent pas un moyen d'afficher spécifiquement le HEAD ou télécommandes ou branche: tous les trois sont affichées par le biais de %d , avec une seule couleur possible.


mise à Jour Mai 2013, que mentionnés ci-après par Elad Shahar (upvoted), git 1.8.3 offre une option de plus:

git log –format porte maintenant un jeton %C(auto) qui dit à Git d'utiliser la couleur lors de la résolution %d (décoration), %h (court commettre nom de l'objet), etc. pour la sortie du terminal.

Ce Atlassian blog commentaires que cette fonctionnalité fait partie de plusieurs autres porté sur le format ( git rebase , git count-objects ) et de couleurs ( git branch -vv )

vient s'ajouter au 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)

Note: git 2.4+ (Q2 2015) fera un meilleur travail de réinitialisation de la couleur autour des noms de branche.

Voir commit 5ee8758 by Junio CA Hamano ( gitster ) :

log --decorate : ne pas laisser filtrer la couleur" commit " dans l'article suivant

dans " git log --decorate ", vous verriez le en-tête commit comme ceci:

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

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

si vous vouliez peindre la tête et le nom de la branche locale dans la même couleur que le corps du texte (peut-être parce que cyan et vert sont trop faibles sur un terminal noir sur blanc pour être lisible), vous ne voudriez pas avoir à dire

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

parce que vous ne seriez pas en mesure de réutiliser la même configuration sur un terminal blanc sur noir. Vous vous attendez naïvement

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

de travailler, mais malheureusement il ne le fait pas.

Il peint la corde " HEAD " et le nom de la branche dans la même couleur que le ouverture de la parenthèse ou une virgule entre les éléments de décoration.

C'est parce que le code oublie pour réinitialiser la couleur après l'impression, le "préfixe" dans sa propre couleur.


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

voir commit 429ad20 par Junio CA Hamano ( gitster ) , 13 mai 2015.

(Fusionné par Junio C. Hamano -- gitster -- dans commit fd70780 , 22 mai 2015)

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

la " log --decorate "amélioration en Git 2.4 qui montre le commit à la pointe de la branche actuelle par exemple " HEAD -> master ", n'a pas fonctionné avec --decorate=full.


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


Git 2.10.2 (Oct. 2016) résout d'autres bugs avec commettre 82b83da (29 septembre 2016), et commettre c99ad27 (17 septembre 2016) par René Scharfe (`) .

(fusionné par Junio CA Hamano -- gitster -- dans commettre 76796d4 , le 28 octobre 2016)

pretty : éviter d'ajouter reset 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 s'assurer que la coloration automatique est affichée comme prévu.

Arrêter de le faire si la sortie strbuf est vide , c'est-à-dire quand %C(auto) apparaît au début de la chaîne de format, parce qu'il n'y a pas besoin de réinitialiser et nous enregistrons quelques octets dans la sortie.

pretty : laisser %C(auto) réinitialiser tous les attributs

Réinitialiser les couleurs et attribue sur %C(auto) pour permettre la pleine automatique contrôle sur eux; autrement attributs comme gras ou inversé pourrait toujours être en vigueur à partir de la précédente %C espaces réservés .

52
répondu VonC 2017-05-23 12:09:48

les parenthèses:

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

donc %C(yellow reverse) marcherait.

9
répondu Josh Lee 2011-05-04 23:02:06

l'option de configuration log.decorate peut activer/désactiver les décorations par défaut dans les logs.

git config --global log.decorate full

une fois que cela est fait, vous pouvez utiliser color.decorate.* pour jouer avec les couleurs

7
répondu Henrik Gustafsson 2012-03-23 17:51:23