我正在使用脚本(如下)来修改提示,以告诉我当前分支以及它是否与远程分支匹配。我根据分支名称做出一个假设,即是否有差异意味着本地副本在前面还是后面,但是我希望有一种确定的方法。注意:git版本1.8.3.1(RHEL7)。
#!/bin/sh
exec 2>/dev/null
bname=$(git branch | awk '$1 == "*" {print $2}')
[ "${bname}" = "" ] && exit 0
rmtname=$(git rev-parse --abbrev-ref @{u} | sed 's/\// /')
if [ "${rmtname}" != "@{u}" ] ; then
rmthash=$(timeout 10 git ls-remote ${rmtname} | cut -f1)
lclhash=$(git rev-parse HEAD)
fi
if [ "${rmthash}" = "" ] ; then
status="[unknown]"
elif [ "${lclhash}" != "${rmthash}" ] ; then
if [ "${bname}" = "develop" ] ; then
status="[behind]"
else
status="[ahead]"
fi
fi
echo " (${bname}${status})"
示例提示(当前,需要拉动,需要推动):
asw-dev:~/workingpool (develop) :
asw-dev:~/workingpool/acropolis (develop[behind]) :
asw-dev:~/workingpool/moira (im-123[ahead]) :
(括号中的部分是此脚本的输出)
注意:任何解决方案都需要适合在输入每个命令后运行(例如,运行不需要10秒钟)
PS,我看过一些关于SO的问答,但它们要么是针对git的较新版本,要么是像我这样的git neewb无法理解的。