git - 在 bash 中获取 git 状态的最快方法

标签 git bash

一段时间以来,我一直在 bash 的 PS1 提示符中使用 __git_ps1 函数 (使用 PS1='\w$(__git_ps1)')。现在我想根据分支给它上色 地位。

我写了一个 bash 函数来检查当前分支是否被修改,并且 根据状态显示红色或白色。问题是它使用 git status 来检查状态(这是我知道的唯一方法),这是几个 比 __git_ps1 慢很多倍,这足以在 我正在使用提示(我的上网本非常弱)。

所以我问:有没有更快的方法来检查当前 git 文件夹的状态? __git_ps1 比手动解析 git branch 快很多,所以我在想 可能还有其他一些 stash 的 git 函数。

最佳答案

不完全是你的答案,但 bash-completion 有这个内置的。

如果将 bash ENV GIT_PS1_SHOWDIRTYSTATE 设置为非空值,未暂存 (*) 和暂存 (+) 更改将显示在分支名称旁边。您可以使用 bash.showDirtyState 变量配置每个存储库,一旦启用 GIT_PS1_SHOWDIRTYSTATE,该变量默认为 true。

您还可以通过将 GIT_PS1_SHOWSTASHSTATE 设置为非空值来查看当前是否 stash 了某些内容。如果有东西被 stash ,那么分支名称旁边会显示一个“$”。

如果您想查看是否有未跟踪的文件,则可以将 GIT_PS1_SHOWUNTRACKEDFILES 设置为非空值。如果有未跟踪的文件,则会在分支名称旁边显示一个“%”。

但不确定启用此功能时速度是否会下降。 如果你想做着色:

暂存文件:

if git rev-parse --quiet --verify HEAD >/dev/null; then
 git diff-index --cached --quiet HEAD -- || color for staged changes
else
  color unstaged changes
fi

stash 文件

git rev-parse --verify refs/stash >/dev/null 2>&1 && color for stashed files

未跟踪的文件

if [ -n "$(git ls-files --others --exclude-standard)" ]; then
  Color untrack files
fi

以上片段来自 bash-completion 脚本。

关于git - 在 bash 中获取 git 状态的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11122410/

相关文章:

eclipse - 如何使用 EGit 在 Eclipse 中配置 GIT HTTPS 客户端证书身份验证?

git - 如何查找 Bitbucket 帐户 UUID?

linux - centos7 : create service to start script bash

linux - “查找”包含指定范围内整数的文件(在 bash 中)

git - merge 开发到发布分支

git - 在 Visual Studio 2015 中同步时使用 rebase

git rebase - 批量更改消息

linux - 如何使用 Bash 脚本仅在 perl 脚本中插入一行新代码

Xmlstarlet,多个元素和日期排除

linux - Bash 命令行参数通过 ssh 传递给 sed