zoukankan      html  css  js  c++  java
  • 【git】之使用shell脚本提交代码

    为减少提交步骤,防止提交错误,使用Shell脚本进行git提交不失一件好事

    #!/bin/sh
    # @author Hubal  
    # @Email Hubal@123.com
    # @createBy 2018-11-30
    # Shell脚本提交git代码 简单,快速,高效
    # 
    author = Hubal
    echo ' >>>>>> start push <<<<<< '  
    echo " ====== 当前分支 ====== "  
    branch= git branch
    echo $branch 
    
    # 判断参数1是否包含参数2
    contains_str(){
        # echo " >>> $1 <<< "
        # echo " <<< $2"
        
        contains_result=$(echo $1 | grep "${2}")
        if [[ -n $contains_result  ]] ; then
              return 1
          else
              return 0     
        fi
        
    }
    
    git_add(){
        echo ">>>>>> 执行 git add 之前,本地文件状态如下 <<<<<<"
        git status 
        statusResult=$(git status)
        no_change="nothing to commit"
    
        contains_str "$statusResult" "$no_change"
    
        if [[ $? == 1 ]]; then
            echo "=== 当前没有新增或者修改的文件 ==="
            git_push
            exit
        fi
    
        read -p "是否确定add?Y|N : " add_params
        if [[ $add_params == "Y" || $add_params == "y" ]]; then 
                git add .
        else 
            exit 
        fi     
    }
    
    git_commit(){
         echo ">>>>>> 执行 git commit 之前,本地文件状态如下 <<<<<<"
         git status 
         read -p "是否确定commit?Y|N : " commit_params
         if [[ $commit_params == "Y" || $commit_params == "y" ]] ; then
                 read -p "请输入commit信息: " commit_msg
                 if [ -z $commit_msg  ] ; then 
                     git commit -m "git commit by $author" .
                 else
                     git commit -m $commit_msg .    
                 fi
         elif [[ $commit_params == "N" || $commit_params == "n" ]] ; then 
              exit 
         else 
             exit    
         fi
    }
    
    git_push(){
        echo ">>>>>> 执行 git push 之前,本地文件状态如下 <<<<<<"
        git status 
        current_branch=$(git symbolic-ref --short -q HEAD) 
        echo ">>>>>> 当前分支:$current_branch <<<<<<"
        read -p "是否确定push?Y|N : " push_confirm
        if [[ $push_confirm != "Y" &&  $push_confirm != "y" ]]; then
            echo ">>>>>> end push <<<<<<"
            exit
        fi
        read -p "请输入远程git地址别名,默认是origin: " origin_params 
        echo -e "
    "
        read -p "请输入远程分支名称,默认是当前分支: " branch_params
        push_result="";
        if [[ -z $origin_params && -z $branch_params ]]; then
            echo ">>>>>> push origin $current_branch"
            sleep 5 
            git push origin $current_branch 
    
        elif [[ -n $origin_params && -n $branch_params ]]; then
            echo ">>>>>> push $origin_params $branch_params"
            sleep 5 
            git push $origin_params $branch_params
    
        elif [[ -z $origin_params && -n $branch_params  ]]; then
            echo ">>>>>> push origin $branch_params"
            sleep 5 
            git push origin $branch_params
    
        elif [[ -n $origin_params && -z $branch_params  ]]; then
            echo ">>>>>> push $origin_params $current_branch"
            sleep 5 
            git push $origin_params $current_branch    
        else
            echo ">>>>>> end push <<<<<<"    
        fi
        
    }
    
    
    
    read -p "默认push当前分支,Q代表quit,其他单词代表切换分支 : " branch
    if [[ $branch == "Y" || $branch == "y" || -z $branch ]] ; then 
            # echo  "你输入的是:  $branch "
            statusResult=$(git status)
            to_commit="Changes to be committed"
            contains_str "$statusResult" "$to_commit"
            if [[ $? != 1 ]]; then
                git_add;
            else 
                git add . 
                echo " ====== 本地没有需要add的文件,直接commit ====== "
            fi
            git_commit;
            git_push;
            exit;
    
    elif [[ $branch == "Q" || $branch == "q" ]] ; then
            # echo "你输入的是: $branch ,代表退出当前操作!" 
            exit 
    else  
        git checkout $branch
        echo -e "当前分支: 
     $(git branch) "  
        git_add;
        git_commit;
        git_push;
        exit;
    fi
  • 相关阅读:
    抛开BlazeDS,自定义flex RPC
    设计模式学习03装饰器模式
    通过ANT生成MANIFEST.MF中的ClassPath属性
    Spring JDBCTemplate与Hiberante混用
    关于 两个 datetime 列的差别导致了运行时溢出
    在Wcf中使用Nhibernate (续)
    sql2005/sql2008 分页
    工行支付api查询asp.net C# 实现
    生成静态页面的vbscript
    Asp.net Mvc Post ID Bug
  • 原文地址:https://www.cnblogs.com/gyjx2016/p/10058209.html
Copyright © 2011-2022 走看看