2015-08-13 8 views
8

Ich habe eine Reihe von Verzweigungen in meinem lokalen Git-Repository und ich behalte eine bestimmte Benennungskonvention, die mir hilft, zwischen kürzlich verwendeten und alten Verzweigungen oder zwischen zusammengeführten und nicht mit Master zusammengeführt zu unterscheiden.Wie kann ich Git Zweige basierend auf ihren Namen färben?

Gibt es eine Möglichkeit, Branchennamen in der Ausgabe von git branch gemäß einiger Regexp-basierten Regeln zu färben, ohne externe Skripte zu verwenden?

Das Beste, was ich bisher gefunden habe, ist git branch über ein externes Skript laufen zu lassen und einen Alias ​​zu erstellen. Dies kann jedoch nicht sehr tragbar sein ...

+0

Blick auf [git Zweig] (http://stackoverflow.com/questions/31984968/color-git-branches-based-on-their-names) doc. Ich denke nicht, dass dies möglich ist – Vishwanath

+1

Mit einem benutzerdefinierten Skript ist der Weg zu gehen, aber verwenden Sie 'git for-each-ref' (Sanitär) und nicht' git branch' (Porzellan). – Jubobs

+0

'git for-each-ref' sieht cool aus, ich habe es noch nie zuvor benutzt. –

Antwort

5

git-branch dich nicht tun lassen, dass

Gibt es eine Möglichkeit, um Farbe Zweignamen in der Ausgabe von git branch nach einigen regexp basierten Regeln ohne externe Skripte verwenden?

Nein; Git bietet Ihnen keine Möglichkeit, die Farben in der Ausgabe von git branch basierend auf Mustern anzupassen, die den Zweignamen entsprechen.

schreiben benutzerdefinierten Skript

Das Beste, was ich mit so weit habe kommen ist git branch über ein externes Skript auszuführen, und einen Alias ​​zu erstellen.

Ein Ansatz ist in der Tat ein benutzerdefiniertes Skript zu schreiben. Beachten Sie jedoch, dass git branch ein Porzellan-Git-Befehl ist und daher in Skripten nicht verwendet werden sollte. Bevorzugen Sie den Klempner Git Befehl git-for-each-ref dafür.

Hier ist ein Beispiel für ein solches Skript; passen Sie es an Ihre Bedürfnisse an.

#!/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 

einen Aliasnamen Machen Sie es aus

das Skript auf Ihrem Weg Setzen und

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

-Test

Hier laufen ist, was ich in einem Spielzeug-Repo (in GNU bash erhalten):

enter image description here