Bash - 用于分支管理的GIT小片段

时间:2017-01-28 10:57:22

标签: git bash ps1

星期六早上的愚蠢代码段。

我在网上找到了一个片段代码,可以让我在PS1中获得当前分支,太棒了!但...

我希望根据分支有不同的颜色。

我说,“你对bash一无所知但应该很简单!只是一个......”

经过6个小时的测试,我们走了。

有人可以解释一下我的问题在哪里吗?

我知道GitHub上有很多项目可以帮我完成这项工作,但我想了解一下。

非常感谢

parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'

}

set_ps1_git_branch_color(){
    BRANCH=$(parse_git_branch)
    if [ $BRANCH == "(master)" ]; then
        echo -e "\W\[\033[35m\] $BRANCH \[\033[00m\]"
    fi
    if [ $BRANCH == "(test)" ]; then
        echo -e "\W\[\033[32m\] $BRANCH \[\033[00m\]"
    fi         
}
export PS1="\u@\h $(set_ps1_git_branch_color) $ "

只有在每次git操作(如checkout)之后执行source ~/.bash_profile时,它才有效。

但是原始代码段parse_git_branch()能够在没有source命令的情况下更改分支名称。

所以...我在这里缺少什么? :(

2 个答案:

答案 0 :(得分:3)

您的错误很少:

 export PS1="\u@\h $(set_ps1_git_branch_color) $ "

 # should be (added \ before $(set...))
 # the \ will execute the command during runtime and not right now.
 # without the \ it will executed and determined of first run and not every time
 export PS1="\u@\h \$(set_ps1_git_branch_color) $ "

颜色格式:

# Output colors
red='\033[0;31m';
green='\033[0;32m';
yellow='\033[0;33m';
default='\033[0;m';

使用颜色更新脚本:

set_ps1_git_branch_color(){
    ...
    echo -e "${green} $BRANCH ${default}"
}

修复了要复制和粘贴的脚本

# Output colors
red='\033[0;31m';
green='\033[0;32m';
yellow='\033[0;33m';
default='\033[0;m';

parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'

}

set_ps1_git_branch_color(){
    BRANCH=$(parse_git_branch)
    if [ $BRANCH == "(master)" ]; then
        echo -e "${green} $BRANCH ${default}"
    fi
    if [ $BRANCH == "(test)" ]; then
        echo -e "${yellow} $BRANCH ${default}"
    fi
}

export PS1="\u@\h \$(set_ps1_git_branch_color) $ "

enter image description here

答案 1 :(得分:2)

以防有人感兴趣。

此脚本显示PS1中的分支, 如果分支是“主人”。名字会变红并闪烁 如果分支是“测试”名称将为黄色并闪烁。 对于其他分支,颜色将为白色。

# Output colors
red='\033[31;5m';
white='\033[0;97m';
yellow='\033[33;5m';
default='\033[0;m';
blue='\033[0;34m';
magenta='\033[0;35m';
cyan='\033[0;36m';

parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

set_ps1_git_branch_color(){
    BRANCH=$(parse_git_branch)
    if [ -z $BRANCH ]; then
        return 0
    fi
    if [ $BRANCH = "(master)" ]; then
        echo -e "${red}${BRANCH}${default}"
        return 0
    fi
    if [ $BRANCH = "(test)" ]; then
        echo -e "${yellow}${BRANCH}${default}"
        return 0
    fi
    echo -e "${white}${BRANCH}${default}"
}

export PS1="${cyan}\h ${magenta}\u ${blue}\w\$(set_ps1_git_branch_color)${default} \n\\$ \[$(tput sgr0)\]"

非常感谢CodeWizard! :)