前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell:获取git当前分支或tag

shell:获取git当前分支或tag

作者头像
10km
发布2019-09-06 09:24:03
12K0
发布2019-09-06 09:24:03
举报
文章被收录于专栏:10km的专栏10km的专栏

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/10km/article/details/100181115

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

代码语言:javascript
复制
# 返回$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都考虑到了,很完善,

在这里插入图片描述
在这里插入图片描述

于是基于这个方法我写了自己的函数,经测试没问题

代码语言:javascript
复制
# 返回$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 --exact-match HEAD || \
    git -C "$folder" rev-parse HEAD
}
代码语言:javascript
复制
$ 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 --exact-match HEAD || \
>     git -C "$folder" rev-parse HEAD
> }

$ current_branch .
facelog-2.4.1

$ current_branch /j/fdevmgrWhse
master
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年09月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档