git status和git push扩展脚本

git status和git push扩展脚本

1、对git status扩展使用方法

我们先来看看效果:

在这里插入图片描述

在之前的时候,我是用git status 查看工作区的变化,我想看某个文件的变化必须使用git diff file_abs_path,必须要输入文件的相对目录。每次都输入我觉得很是费劲。

所以我想了个办法,写个脚本git_st其实是我对shell脚本起了别名,我把放在.bashrc中,alias git_st=source git_status.sh

如果你clone了platypus项目直接执行install脚本就可以了,在source ~/.bashrc,使配置文件生效。

使用方法:

$ git_st
$ git diff $dolphin_cpp
原理:

就是先遍历所有已经修改过的文件,向bash 中写入环境变量。变量名就是文件+后缀名,值就是文件的绝对路径。在使用git diff的时候,再引用写入的环境变量,比如:$dolphin_cpp,这样就可以了。

再仔细看下脚本:

#!/bin/bash

RED='\e[1;31m' # 红
RES='\e[0m'

GREEN='\033[32m'
GREEN_END='\033[0m'

function echo_red {
        echo -e "${RED}$1${RES}"
}

function echo_green {
        echo -e "${GREEN}$1${GREEN_END}"
}

var_list=()

function update_var {
        suffix=1
        newstr=$1
        # 解决文件可能重名,如果重名则添加后缀方式解决
        while [[ "${var_list[*]}" =~ $newstr ]]
        do
          newstr="$newstr""_""$suffix"
          suffix=$(($suffix+1))
        done

        var_list+=("$newstr")
        export "$newstr=$2"
        echo_red "$newstr=$2"
}

top_dir_path=`git rev-parse --show-toplevel`
# 获取 git status 输出的有变化的文件名,并保存到数组 files 中
files=( $(git status --porcelain | tee /dev/tty | awk '{print $2}') )

echo ""

if [ ${#files[@]} -eq 0 ]; then
    echo_green "Not find any modified file"
else
        echo_green "setting envirnoment variable start: "
        # 遍历文件列表,设置环境变量
        for file in "${files[@]}"
        do
                origin_file_name="$(basename "$file")"
                file_name="$(basename "$file")"
                if [[ $file_name == .* ]]; then
                        IFS='.'
                        arr=($file_name)
                        unset IFS
                        # 遍历数组中的每个元素
                        file_name="${arr[1]}"
                else
                        # 提取出文件名(不含后缀)
                        file_name="${file_name%%.*}"
                fi
                # 设置环境变量
                if [[ $origin_file_name = *.* ]]; then
                        file_name="$file_name""_""${origin_file_name##*.}"
                fi
                update_var "$file_name" "$top_dir_path/$file"
        done
        echo_green "setting envirnoment variable end: "
fi

unset RED
unset RES
unset GREEN
unset GREENEND

2、git push扩展

我在使用过程中发现,我的仓库可能有多个远程服务器,每次git push gitee && git push github && git push home,很是费劲。

所以写了个脚本直接在bash输入一个命令:git_push

看下效果:
在这里插入图片描述

在使用这个命令之前,你要确定你的本地分支已经和远程分支关联了。

这个push.sh脚本寥寥数行,但是省事多了。

remote_names=`git remote`

# 遍历所有Git远程仓库的名称并打印它们
for name in ${remote_names}
do
  git push $name
done
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值