2015-08-13 63 views
8

我在我的本地git存儲庫中有許多分支,我保留一個特定的命名約定,它可以幫助我區分最近使用的和舊的分支之間或合併與未與主合併。如何根據名稱爲Git分支着色?

根據一些基於正則表達式的規則,在沒有使用外部腳本的情況下,有沒有辦法在git branch的輸出中爲分支名稱着色?

到目前爲止我所得出的最好結果是通過外部腳本運行git branch,並創建一個別名。然而,這可能不是很便攜...

+0

看着[git分支](http://stackoverflow.com/questions/31984968/color-git-branches-based-on-their-names)doc。我不認爲這是可能的 – Vishwanath

+1

使用自定義腳本是要走的路,但使用'git for-each-ref'(管道)而不是'git branch'(瓷器)。 – Jubobs

+0

git for-each-ref'看起來很酷,我從來沒有用過它。 –

回答

5

git-branch不會讓你這麼做

是否有根據一些基於正則表達式規則沒有辦法顏色分支名稱中的git branch輸出使用外部腳本?

否; Git不提供您根據分支名稱匹配的模式自定義git branch輸出中的顏色的方法。

編寫自定義腳本

我想出到目前爲止是通過外部腳本運行git branch,並創建一個別名最好的。

一種方法的確是寫一個自定義腳本。但是,請注意git branch是一個瓷器Git命令,因此,不應在腳本中使用它。爲此,首選管道Git命令git-for-each-ref

這是一個這樣的腳本的例子;定製它以滿足您的需求。

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

做一個別名出來的

把你的路徑上的腳本並運行

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

測試

以下是我的玩具回購獲得(在GNU的bash ):

enter image description here