shell:获取git当前分支或tag

shell下如何获取git的当前所在分支名或tag呢?
为了解决这个小问题,我之前是走了弯路的,之前我简单的想法就是解析git branch输出的内容从中获取 分支或tag名。
如下代码,

# 返回$1指定的git项目的当前分支(branch)或标签名(tag)
# $1 git项目源码位置
function current_branch(){
    git -C $1 branch | grep '*' | sed -e 's/\*//g' -e 's/HEAD detached at//g' -e 's/\s*//g' -e 's/[\(\)]//g' 
}

但是我一直觉得这个办法不靠谱。对于普通的分支名(such as master),这个办法是没啥问题,但当切换到某个tag时。git branch的输出是这样的:

$ git branch

  • (HEAD detached at facelog-2.4.1)
    dev2
    master

上面的方法就是把输出字符串(HEAD detached at facelog-2.4.1)中无用的信息(HEAD,detached,at)都清理掉。现在用着也没问题,但保不齐哪天git版本升级,输出的单词改了一点,这个办法就不管用了。

今天认真在google上找了一下这个问题的解决办法,在 stackoverflow上找到这个帖子:
https://stackoverflow.com/questions/6245570/how-to-get-the-current-branch-name-in-git

嗯,挺对症的。在大神们提出了N种办法中找到下面这个,分支名,tag名,commit id都考虑到了,很完善,

在这里插入图片描述
于是基于这个方法我写了自己的函数,经测试没问题

# 返回$1指定的git项目的当前分支(branch)或标签名(tag)
# $1 git项目源码位置,为空获则默认为当前文件夹
function current_branch () {
    local folder="$(pwd)"
    [ -n "$1" ] && folder="$1"
    git -C "$folder" rev-parse --abbrev-ref HEAD | grep -v HEAD || \
    git -C "$folder" describe --tags HEAD || \
    git -C "$folder" rev-parse HEAD
}
$ function current_branch () {
>     local folder="$(pwd)"
>     [ -n "$1" ] && folder="$1"
>     git -C "$folder" rev-parse --abbrev-ref HEAD | grep -v HEAD || \
>     git -C "$folder" describe --tags HEAD || \
>     git -C "$folder" rev-parse HEAD
> }

$ current_branch .
facelog-2.4.1

$ current_branch /j/fdevmgrWhse
master
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值