我一直在研究检查存储库中更改以更新 PS1 提示的最快方法。由于不值得详述的原因,无法访问 __git_ps1() 宏,而且无论如何其他帖子都建议了各种命令,包括 __git_ps1() 中使用的命令。
原因:我正在通过 VPN 和 ssh 访问远程服务器上的存储库,远程存储库通过我与我们内部 git 服务器的连接返回。我猜(但真的不确定这是否属实)这可能是在新的一天建立新连接的原因,cd 到这个远程服务器上的 repo 可能会导致git ls-files -m
需要 3 或 4 秒才能完成,并且在文件缓存有帮助后仍需要长达 1 秒的时间。
为了改善这一点,我发现git diff-index --quiet HEAD
几乎是即时的,但第二天它开始返回“1”,即使实际上没有任何变化(非常缓慢的运行没有输出git status
)。我发现这git update-index --refresh -q
似乎可以解决问题(很快),并且如果实际上没有任何更改,也会返回“0”。
从我读过的内容来看,我认为从 PS1 提示符运行应该是安全的,但我知道这是一个“较低级别”的 git 命令,我可能无法理解所有含义。因此,需要明确的是,我目前有以下内容来检查更改,这似乎总是很快,但是一天后开始在干净的 repos 中输出“*”。
if git diff-index --quiet HEAD 2>/dev/null && [[ -z "$(git ls-files --others --exclude-standard --directory --no-empty-directory)" ]]
then echo -n " "
else echo -n " *"
fi
任何“git 大师”都可以看到将第一个测试更改为的问题git update-index --refresh -q
吗?