Comment coloriser la sortie de git?

256

Existe-t-il un moyen de colorer la sortie pour git (ou toute commande)?

Considérer:

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

Et

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
#

La sortie est identique, mais les informations sont totalement différentes: le fichier est passé de non mis en scène à staged pour commit.

Y at-il un moyen de coloriser la sortie? Par exemple, les fichiers non mis en scène sont rouges, les fichiers mis en scène sont verts?

Ou même Changes not staged for commit:au rouge et # Changes to be committed:au vert?

Travailler dans Ubuntu.

EDIT: googler trouvé cette réponse qui fonctionne très bien: git config --global --add color.ui true.

Cependant, existe-t-il une solution plus générale pour ajouter de la couleur à une sortie de commande?

B Seven
la source
1
Vous voulez quelque chose qui colorise toutes les sorties de commande? Comment pourrait-il savoir quelles pièces colorier?
Michael Mrozek
Je suppose que s’il existait un moyen de le configurer à l’aide de regex: chaque couleur pourrait avoir un regex de départ. Et il pourrait y avoir une regex de couleur par défaut pour désactiver toutes les couleurs. Et, si le texte "foo" apparaît, affichez-le dans une certaine couleur ...
B Seven

Réponses:

268

Vous pouvez créer une section [color]dans votre ~/.gitconfigavec par exemple le contenu suivant

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

Vous pouvez également contrôler avec précision ce que vous voulez colorer, par exemple:

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

[color "branch"]
  remote = yellow

J'espère que cela vous permet de commencer. Et bien sûr, vous avez besoin d'un terminal prenant en charge la couleur.

Marco
la source
14
Je pense que cela pourrait valoir la peine de placer git config --global color.ui auto (la réponse de @Evgeny) en haut de votre liste ... Je pense que c’est probablement ce que la plupart des gens recherchent. J'ai voté pour les deux ... Je dis simplement, pour l'amour d'Internet comme il vient ici, je pense que beaucoup de gens veulent juste ce simple liner. Tant mieux s'ils l'obtiennent, plus votre bonté supplémentaire.
msouth
Cela a parfaitement fonctionné pour moi - dans la [color "status"]section que j'ai ajoutée branch = yellow.
Wayne Werner
3
vous pouvez aussi ajouter une section [color] au fichier .git / config du projet
andrej
Et vous pouvez simplement définir une variable de configuration pour un seul appel d'une commande git: stackoverflow.com/a/18304605/134044
NeilG
220

Vous voulez probablement utiliser

git config --global color.ui auto

La autopartie indique que git n'utilisera que la couleur sur les terminaux qui la supportent et que vous n'obtiendrez pas de séquences ANSI si vous redirigez la sortie des commandes git vers un fichier, par exemple. Réglage à trueest la même que auto, ce qui est également la valeur par défaut depuis Git 1.8.4.

Il color.uis'agit d'une méta-configuration qui inclut toutes les différentes color.*configurations disponibles avec les commandes git.

Ceci est expliqué en profondeur dans git help config.

Evgeny
la source
Pouvez-vous expliquer la différence entre color.ui true(qui autopointe vers) et always? J'ai lu la documentation mais je ne comprends toujours pas la différence.
chharvey
19
git config --global color.ui auto
git config --global color.branch auto
git config --global color.status auto
Sakis
la source
Pour votre information, seulement cela fonctionnait pour la version 1.5.2.1 de git, les autres réponses ne fonctionnaient pas.
AbhiNickz
14

La réponse acceptée donne la solution la plus courante. Si, pour une raison quelconque, vous ne devez pas modifier de manière permanente la configuration, comme le fait cette solution, vous pouvez remplacer la configuration pour une seule commande git:

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

Par exemple:

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

Testé: pris en charge sur git 2.4.6, non pris en charge sur git 1.7.1.

Hamlet
la source
2
Pour tous ceux qui essaient d'obtenir des couleurs lors de la passe lesscomme je viens de le faire, vous pouvez faire lesspasser les caractères d'échappement de couleurs au terminal via less -R.
xdhmoore
Quand cette fonctionnalité a-t-elle été ajoutée?
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
la source
1

Vous pouvez le faire avec la sortie de commande arbitraire Coloriste . La plupart du temps, cela fonctionne, mais je n’ai pas trouvé comment contourner un bogue dans lequel les invites qui attendaient une entrée ne s'affichent pas. Vous ne pouvez pas simplement taper l’entrée nécessaire connue et appuyer sur Entrée pour continuer dans tous les cas.

Exemple de ~/.acoc.confpour git:

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

..qui fonctionne bien avec alias git="acoc git"dans .bash_profile.

Tom Mahoney
la source
Pouvez-vous partager votre configuration pour acoc?
Greg Dubicki
Nvm, c'était facile à écrire. :) Ajouté à la réponse.
Greg Dubicki
1

Pour une couleur passe git diffdans less, cela fonctionne:

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

Je sais que le poste a quatre ans, mais personne n’a répondu de mon camp, le daltonien. Si vous pouvez distinguer les couleurs, ignorez mon post.

"git status", par exemple, affiche un texte blanc sur fond blanc / noir sur fond blanc (lisible), gris foncé à supprimer (illisible sur fond noir mais lisible sur fond blanc) et gris moyen à ajouter (orge lisible sur fond noir). fond illisible sur fond blanc). J'avais l'habitude de basculer l'arrière-plan de la fenêtre de mon terminal sur / entre blanc / noir afin de pouvoir lire le texte illisible. Une solution simple c'est plus:

 git status | more

Cela rend tout le texte lisible sur une fenêtre de terminal à fond blanc ou noir standard.

Jan David Narkiewicz
la source
1
Vous pouvez également modifier la configuration pour ne définir aucune couleur par défaut ( color.ui = never).
Le gars avec le chapeau
0

ou désactiver tout / la plupart des colorisations via:

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
la source
OP ne cherchait pas à mettre hors couleurs, plutôt tourner sur les couleurs. Dans le programme d’opération, il a expliqué comment faire gitet veut trouver un moyen de le faire de manière plus globale. Si vous connaissez une telle méthode, veuillez éditer votre réponse pour l'expliquer.
Gypsy Spellweaver
Parfois, les gens recherchent quelque chose de très proche mais légèrement différent - mais merci pour le vote négatif.
theRiley
J'ai aimé ça @theRiley
Richard Lindhout