git - bash 始终将 git 分支显示为脏

标签 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> /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 status 的结果。我这辈子都想不通。我必须更改此脚本中的某些内容吗?

最佳答案

它正在寻找的字符串是错误的。 parse_git_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-prompt.sh尽管。这是一个更完整的提示。有关如何使用它的说明在脚本本身中。

关于git - bash 始终将 git 分支显示为脏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19013485/

相关文章:

git - 使用 ssh 进行远程 Git pull 会导致权限被拒绝(公钥)?

git - 多个集结区

bash - 无法使用带有 docker exec 的 psql 命令行从文件运行查询

git - 如何 check out 两次提交之间所有更改的文件

git - 如何在每次从 master pull 后将本地更改应用到 git repo 而无需推送到 master

git - 如何将旧分支转换为 GitHub 上的标签

git - GitLab 中的自动 merge 请求

linux - 使用 sed 命令格式化输出

bash - 在新的后台 tmux 窗口中运行命令并等待进程完成

git - zsh shell 无法识别 git HEAD^