我想在终端上的git repo中显示我当前的分支状态(如*含义已修改),如下所示。但是,即使我切换到git repo,它也始终显示以下内容。
ᴾᴋᴹɴ iFeelNewsBot master wrong... ↪
当我在终端中打开一个新选项卡时,它会显示当前git分支的正确文本呈现。看起来应该如何
ᴾᴋᴹɴ iFeelNewsBot master * ↪
我的自定义bash个人资料代码位于
之下# user name and color
USER_NAME='mr.universe';
TRAINER_TITLE='ᴾᴋᴹɴ'
USER_NAME_COLOR='\[\033[00m\]';
END_COLOR='\e[0m';
# \W = current working path
# \u = user
function parse_git_dirty {
gitStatus=$(git status 2> /dev/null | tail -n1)
clean="nothing to commit, working directory clean"
if [[ -d "./.git" ]]
then
[[ $gitStatus != $clean ]] && echo "*" || echo "="
elif [[ ! -d "./.git" ]]
then
echo "wrong...."
else
echo "STOP"
fi
}
function parse_git_branch {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[\1$(parse_git_dirty)]/"
}
export PS1="\[\033[40;02m\]$TRAINER_TITLE \W \[\033[36;02m\]\[\033[29;00m\]\$(git branch 2>/dev/null | grep '^*' | colrm 1 2) $(parse_git_dirty) ↪ "
答案 0 :(得分:0)
您假设git存储库中的每个目录都包含.git
,但只有存储库的顶级目录中包含.git
目录。因此,第一个if
失败,elif
检查.git
目录是否不存在。看起来结果是真的,它打印'错误'。
答案 1 :(得分:0)
您可以检查您是inside a working tree of a git repo:
inside_git_repo="$(git -C $PWD rev-parse --is-inside-work-tree 2>/dev/null)"
if [ "$inside_git_repo" ]; then
echo "inside git repo"
else
echo "not in git repo"
fi
这比查找.git
文件夹更可靠。