Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash总是将git分支显示为脏的_Git_Bash_Git Branch - Fatal编程技术网

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>

我正在使用一个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> /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