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! :)
愚蠢的星期六早上代码片段。
我在网上找到了一段代码,可以让我在 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! :)