Bash - GIT 分支管理小片段

Bash - GIT small snippet for branch management

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

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

我想根据分支使用不同的颜色。

我说,"You don't know anything about bash but should be really easy! just an if..."

经过 6 个小时的测试,我们开始吧。

谁能告诉我问题出在哪里?

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

非常感谢

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

}

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

如果我在每次 git 操作(如结帐)后执行 source ~/.bash_profile,它就会工作。

但原始片段parse_git_branch()无需source命令即可更改分支名称。

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

你有几个错误:

 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='3[0;31m';
green='3[0;32m';
yellow='3[0;33m';
default='3[0;m';

使用以下颜色更新脚本:

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

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

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

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

}

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) $ "

以防万一有人感兴趣。

此脚本显示 PS1 中的分支, 如果分支是 'master' 名称将是红色并闪烁 如果分支是 'test',名称将呈黄色并闪烁。 对于其他分支,颜色将为白色。

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

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

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! :)