首页 > 解决方案 > 当前的 git 分支是领先还是落后?

问题描述

我正在使用一个脚本(如下)来修改我的提示,以告诉我当前分支以及它是否与远程分支匹配。我正在根据分支名称做出关于差异是否意味着本地副本领先或落后的假设,但我希望有一种真正的方法来确定这一点。注意: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 newb 来说是不可理解的。

标签: git

解决方案


推荐阅读