web-dev-qa-db-fra.com

Comment coloriser la sortie de git?

Existe-t-il un moyen de colorer la sortie pour git (ou n'importe quelle 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 organisé à mis en attente pour validation.

Existe-t-il un moyen de coloriser la sortie? Par exemple, les fichiers non classés sont rouges, les fichiers intermédiaires sont verts?

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

Travailler dans Ubuntu.

EDIT: Google a 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?

269
B Seven

Vous pouvez créer une section [color] dans ton ~/.gitconfig avec par exemple le contenu suivant

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

Vous pouvez également contrôler précisément ce que vous souhaitez colorer de quelle manière, par ex.

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

[color "branch"]
  remote = yellow

J'espère que cela vous aidera à démarrer. Et bien sûr, vous avez besoin d'un terminal qui prend en charge la couleur.

279
Marco

Vous voulez probablement utiliser

git config --global color.ui auto

La partie auto indique que git essaiera uniquement d'utiliser la couleur sur les terminaux qui le supportent, et vous n'obtiendrez pas de séquences ANSI si vous redirigez la sortie des commandes git vers un fichier par exemple. Le définir sur true est identique à auto, et c'est également la valeur par défaut depuis Git 1.8.4.

Le color.ui est une méta-configuration qui inclut toutes les diverses color.* configurations disponibles avec les commandes git.

Ceci est expliqué en détail dans git help config.

235
Evgeny
git config --global color.ui auto
git config --global color.branch auto
git config --global color.status auto
20
sakisk

La réponse acceptée donne la solution la plus courante. Si, pour une raison quelconque, vous n'avez pas besoin de modifier définitivement la configuration, ce que 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, pas pris en charge sur git 1.7.1.

17
Hamlet
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
11
mlibre

Pour une couleur git diff canalisé dans less, cela fonctionne:

git -c color.diff=always diff [...] | less -R
3
jox

Vous pouvez le faire avec Colorier de sortie de commande arbitraire . Cela fonctionne principalement, mais je n'ai pas compris comment contourner un bogue où les invites attendant une entrée ne sont pas affichées et 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.conf pour 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.

1
Tom Mahoney

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

"git status", par exemple, affiche du texte blanc sur fond/noir sur fond blanc (lisible), gris foncé pour supprimé (illisible sur fond noir mais lisible sur fond blanc) et gris moyen pour ajouté (orge lisible sur noir) fond, illisible sur fond blanc). J'avais l'habitude de basculer l'arrière-plan de ma fenêtre de terminal vers/de blanc/noir pour pouvoir lire le texte illisible. Une solution simple est plus:

 git status | more

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

0

Pour coloriser la sortie de git diff vous pouvez ajouter une section color.diff à ~/.gitconfig. Par exemple:

[color "diff"]
  new = bold italic 154
  old = bold italic 196

Ici 154 et 196 sont des codes ANSI 256 couleurs. Pour plus de détails, voir man git config.

0
sergio

ou désactivez tout/la majeure partie de la colorisation 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
0
theRiley

Jetez un oeil à https://github.com/dandavison/delta pour la coloration syntaxique du langage coloré de la sortie (git) diff, et la coloration colorée des lignes ajoutées/supprimées dans le diff.

0
ded7