[bash]设置、读取Git分支的描述信息

2 篇文章 0 订阅

前言

        平时开发过程中,如果项目体量较大,业务修改频繁,难免要新建很多分支,但是分支名通常较短,很难直观地告诉我们它到底是因为什么目的而被创建出来的。这时,我们可以给分支设置描述信息来解决这一问题。

正文

        在git操作中,我们可以这样执行来设置分支描述信息:

$ git config YourBranchName.description "Your branch description 233"

        这个操作实际上是在git的配置表中增加了一个配置变量,名字叫YourBranchName.description,它的值被赋值为Your branch description 233。

        所以,本质就是在一个额外的小本本上记了一句话而已。

        同理,读取信息就只需要这样就行:

$ git config YourBranchName.description

        一般情况下,到这里就可以达到目的了。

        但是,每次都敲这么长的命令不符合发展的潮流:懒惰是科技发展的助推剂。借助工具来完成麻烦的工作是很自然能想到的。网上常见的方式为使用git-br工具,但是安装这玩意儿需要用npm,太麻烦了,原则上这些操作可以自己写个简单的工具脚本解决。

        遂根据原理,完成了如下bash脚本:

#!/bin/bash

# 脚本达成目的:轻松设置当前分支的描述信息;轻松获取所有分支的描述信息。
#
# 原理:
# 设置描述:git config YourBranchName.description [Your description]
# 获取描述:git config YourBranchName.description
#
# 让脚本更方便使用的方式:
# 在 ~/.bashrc中新增一行,为脚本设置别名: alias br=/home/wzj/OldHome/software/br.sh
# 注意替换br.sh的实际绝对路径,保存后执行source ~/.bashrc或者打开新终端后执行 br 命令就可以快捷调用本脚本。

# 1、直接执行br:打印分支名与分支描述信息,第一列为分支名,第二列为分支描述。例子如下:

# wzj@wzj-desktop:~$ br
  #                ---N | D---
  #            combined : 光学测试平台
  #                 dev : 开发分支
  #                 fix : 临时分支,频繁修改
  #              master : 主分支
  #         multiVolSys : 多体系配置选择实现方式重新优化
  #pureWaterTankWatcher : 纯水箱自动补水功能
  #

# 2、执行带参数的br即 “br [your description]”:给当前分支添加分支描述,然后打印所有分支描述。带空格时请将整个描述用单引号或双引号括起来。
# 例子如下(当前处于fix分支):
 #wzj@wzj-desktop:~$ br "临时分支 (测试修改)"
 #                ---N | D---
 #            combined : 光学测试平台
 #                 dev : 开发分支
 #                 fix : 临时分支(测试修改)
 #              master : 主分支
 #         multiVolSys : 多体系配置选择实现方式重新优化
 #pureWaterTankWatcher : 纯水箱自动补水功能
 #

########################最后,刻意设计为不能给非当前分支设置描述#########################

#---下面开始实现---


# 当前分支
curBr=`git symbolic-ref --short -q HEAD`
# 如果输入了参数,且第一个命令行参数不为空值,则将该命令行参数作为描述信息写入到当前分支
if [ -n "$1" ]; then
    newDes=$1                                 #获取输入的描述参数
    if [ -n "$curBr" ]; then
    	git config $curBr.description "$newDes"   #设置分支描述
    fi
fi

result=`git branch` #罗列所有本地分支(不关心remote分支)

branches=() #分支结果集合
index=0     #分支数组索引,用来给数组增加成员

#从集合中遍历所有的分支结果
for things in $result
do
    #忽略文件结果
    if test -f "$things"
    then
        continue
    fi

    #忽略目录结果
    if test -d "$things"
    then
        continue
    fi
    
    #分支存在则处理
    if [ -n "$(git branch --list $things)" ]; then
    	#将分支名添加到新的索引下
    	branches[$index]=$things
    	#索引自增
    	index=`expr $index + 1`
    fi
done

#获取分支名集合中名字最长的长度,用于最终结果美观打印
function maxBranchNameLen() {
  max=0
  maxIndex=0
  maxLen=$index
  for ((i=0;i<$maxLen;i++));do
    len=${#branches[$i]}
    if [ $len -gt $max ];then
      max=$len
      maxIndex=$i
    fi
  done
  return $max
}

#执行获取最长名字长度
maxBranchNameLen $branches
maxLength=$(($?+2)) #后面加*号和空格,这里需要加2,否则当前分支为最长的分支时显示不对齐

#打印某一个分支的分支描述
function printDes() {
  des=`git config $1.description`
  brName="$1"
  if [ "$brName" == "$curBr" ]; then
        # 现在还能打印颜色了
  	printf "|\033[32m%+"$maxLength"s | %s\033[0m\n" "* $brName" "$des"
  else
  	printf "|\033[31m%+"$maxLength"s | %s\033[0m\n" "$brName" "$des"
  fi
}

#打印表头
printf "|\033[44m%+"$maxLength"s\033[0m | \033[44m%s\033[0m\n" Name Description

#打印结果列表
for br in ${branches[@]};do
  printDes "$br"
done

#不在任何分支上,则获取当前的commit信息
if [ "$curBr" == "" ]; then
	curBr="$(git log -1 --oneline)"
	echo " 当前位置:" $curBr
fi

#完成
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值