我想将当前的 git 哈希放入我的提示中;但我最初的方法有点滞后:
psvar[1]="$(git log -n1 --pretty='format: %h' 2>/dev/null)"
(包括$PROMPT
使其%1v
可见)
我尝试了vcs_info
插件,但效果也不太好。所以我最终写了自己的函数:
function githead() {
local commondir ref hash _
local gitdir="${1:a}"
until [[ -e "$gitdir/.git" ]]; do
local updir="${gitdir%/*}"
[[ "$updir" == "$gitdir" ]] && return 1
gitdir="$updir"
done
gitdir="$gitdir/.git"
[[ -f "$gitdir" ]] && read _ gitdir < "$gitdir"
read _ ref < "$gitdir/HEAD"
local commondir="$gitdir/commondir"
[[ -e "$commondir" ]] && gitdir="$gitdir/$(<$commondir)"
ref="$gitdir/$ref"
read hash <"$ref"
print -r "${hash::12}"
return 0
}
它确实更快,但注定会很脆弱。特别是,我必须读取的几个文件看起来可能包含多行内容,而且不一定将我想要的行放在顶部。
有没有一种快速的方法可以从 git 获取当前哈希,并且比我手写的更加强大?