bash总是将git分支显示为脏的
我正在使用一个bash脚本来显示当前的git分支,这个脚本是我在网上某处找到的,而且无处不在bash总是将git分支显示为脏的,git,bash,git-branch,Git,Bash,Git Branch,我正在使用一个bash脚本来显示当前的git分支,这个脚本是我在网上某处找到的,而且无处不在 function parse_git_dirty { [[ $(git status 2> /dev/null | tail -n1) != "nothing to commit (working directory clean)" ]] && echo "*" } function parse_git_branch { git branch --no-color 2>
function parse_git_dirty {
[[ $(git status 2> /dev/null | tail -n1) != "nothing to commit (working directory clean)" ]] && echo "*"
}
function parse_git_branch {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[\1$(parse_git_dirty)]/"
}
export PS1='\w\[\033[1;37m\]$(parse_git_branch)\[\e[0m\]$ '
这在我的Mac电脑上运行良好。但我最近买了一台新的Mac电脑,并通过备份将我所有的数据传了进来。然而,在我的新机器上,分支状态似乎总是脏的
# On branch master
nothing to commit, working directory clean
~/Desktop/Work/relearning_rails[master*]$
这是git状态的结果。我一辈子都搞不懂这个。是否必须更改此脚本中的某些内容?它要查找的字符串错误<代码>解析\u git\u dirty应如下所示:
function parse_git_dirty {
[[ $(git status 2> /dev/null | tail -n1) != "nothing to commit, working directory clean" ]] && echo "*"
}
更好的实现可能类似于:
function parse_git_dirty {
[[ -n "$(git status -s 2> /dev/null)" ]] && echo "*"
}
此版本将取决于是否返回了任何数据,而不是检查数据
也许你想考虑一下。这是一个更完整的提示。关于如何使用它的说明在脚本本身中。刚刚在git 2.6.4或2.7中变得更加健壮(2015年12月):
参见(2015年11月21日)作者。(于2015年12月4日合并) bash提示符:即使在孤立分支上也指示脏索引
\uuuu git\u ps1()
在孤立分支上时不指示脏索引
要检查索引的肮脏程度,\uuu git\u ps1()
运行“git diff index--cached…”。。。HEAD
”,它在孤立分支上不起作用,因为HEAD
没有指向有效的提交
运行“git diff…”--而是缓存的
,因为它在有效和无效的头上都做了正确的事情,即在前一种情况下将索引与现有头进行比较,在后一种情况下将索引与空树进行比较。
这修复了在本系列的第一次提交中添加的两个失败测试
已使用“git diff
”和
即使在孤立分支上也能正确显示
似乎每次git更新都会前后更改“无需提交,工作目录干净”。我也有同样的问题,但到目前为止,我太懒了,没有找到比每次都调整字符串更好的解决方案。感谢您指出了一个更好的解决方案:)您在回答中的这段代码符合我的要求,是我当前的解决方案,但我也会看看git-prompt.sh。谢谢你的回答
git diff --no-ext-diff --quiet || w="*"
git diff --no-ext-diff --cached --quiet || i="+"
if [ -z "$short_sha" ] && [ -z "$i" ]; then
i="#"
fi