2015-08-13 12 views
8

Ho un numero di filiali nel mio repository git locale e mantengo una particolare convenzione di denominazione che mi aiuta a distinguere tra rami usati e vecchi o tra uniti e non uniti con master.Come posso colorare i rami Git in base al loro nome?

C'è un modo per colorare i nomi dei rami nell'output di git branch in base a alcune regole basate su espressioni regolari senza utilizzare script esterni?

Il meglio che ho trovato finora è quello di eseguire git branch attraverso uno script esterno e creare un alias. Tuttavia, questo potrebbe non essere molto portabile ...

+0

Guardando [git branch] (http://stackoverflow.com/questions/31984968/color-git-branches-based-on-their-names) doc. Non penso che sia possibile – Vishwanath

+1

Usare uno script personalizzato è la strada da percorrere, ma usa 'git for-each-ref' (plumbing) piuttosto che' git branch' (porcellana). – Jubobs

+0

'git for-each-ref' sembra interessante, non l'ho mai usato prima. –

risposta

5

git-branch non ti permette di fare questo

C'è un modo per i nomi filiali colore nella produzione di git branch secondo alcune regole regexp-based senza usando gli script esterni?

No; Git non ti offre un modo per personalizzare i colori nell'output di git branch in base a modelli corrispondenti ai nomi dei rami.

scrivere uno script personalizzato

Il migliore che è venuta in mente finora è quello di eseguire git branch tramite uno script esterno, e creare un alias.

Un approccio è infatti quello di scrivere uno script personalizzato. Tuttavia, si noti che git branch è un comando Git porcellana e, come tale, non deve essere utilizzato negli script. Preferisco il comando Git idraulico git-for-each-ref per quello.

Ecco un esempio di tale script; personalizzalo in base alle tue esigenze.

#!/bin/sh 

# git-colorbranch.sh 

if [ $# -ne 0 ]; then 
    printf "usage: git colorbranch\n\n" 
    exit 1 
fi 

# color definitions 
color_master="\033[32m" 
color_feature="\033[31m" 
# ... 
color_reset="\033[m" 

# pattern definitions 
pattern_feature="^feature-" 
# ... 

git for-each-ref --format='%(refname:short)' refs/heads | \ 
    while read ref; do 

     # if $ref the current branch, mark it with an asterisk 
     if [ "$ref" = "$(git symbolic-ref --short HEAD)" ]; then 
      printf "* " 
     else 
      printf " " 
     fi 

     # master branch 
     if [ "$ref" = "master" ]; then 
      printf "$color_master$ref$color_reset\n" 
     # feature branches 
     elif printf "$ref" | grep --quiet "$pattern_feature"; then 
      printf "$color_feature$ref$color_reset\n" 
     # ... other cases ... 
     else 
      printf "$ref\n" 
     fi 

    done 

creare un alias fuori di esso

Mettere lo script sul vostro percorso ed eseguire

git config --global alias.colorbranch '!sh git-colorbranch.sh' 

prova

Ecco quello che mi capita in un repo giocattolo (in GNU bash):

enter image description here

Problemi correlati