美文网首页终端研发部
git 终端操作小工具

git 终端操作小工具

作者: Dawn_wdf | 来源:发表于2017-12-14 15:37 被阅读16次

    公司项目使用git作为版本管理器,由于一些原因我们使用的是命令行,可不是所有人都熟悉命令行,而且在正常情况下,在使用git命令行时总有几个流程是必须要走的。所以做了一个简单的小工具,让成员在提交代码的时候使用,可以减少输入命令行带来的负担,主要是手指负担-再也不用敲那么多命令了。当然如果版本管理时出现问题,还是要使用终端乖乖敲得。
    创建文本文件,并将后缀改成.command。
    保存后在终端输入命令:chmod -x command文件的路径
    如:

    chmod -x /desktop/autoGit.command
    

    然后编辑文件:

    #!/bin/sh
    
    function conflictJudegment(){
    
      echo "\033[31m\n执行rebase后的结果为:\n\n$rebaseReuslt \n--------------  \033[0m"
    
      successStr="First, rewinding head to replay your work on top of it..."
      compareResult=$(echo $rebaseReuslt | grep "${successStr}")
    
      # echo "\033[31m$compareResult\033[0m"
      if [[ "$compareResult" != "" ]]
      then
        echo "\033[31m \n-----rebase成功了---- \n \033[0m"
        if [[ "$needPush" = "Y" ]]; then
          echo "\033[33m \n --------------- git push --------------  \033[0m"
          git push
        fi
    
      else
        echo "\033[31m \n----rebase失败了---- \n \033[0m"
    
        if [[ "$rebaseReuslt" = "" ]]; then
          echo "\033[31m请检查两条星号线之间的提示信息,按照提示信息进行终端操作 \033[0m"
        else
          needsMerge="needs merge"
          conflict="CONFLICT"
          compareResult=$(echo $rebaseReuslt | grep "${needsMerge}") #对比是否有文件冲突的结果
          compareConfilictResult=$(echo $rebaseReuslt | grep "${conflict}") #对比是否有代码文件的冲突
          if [[ "$compareResult" != "" ]]; then
            echo  "\033[031m可能有非源码文件冲突,请检查项目中command、number、markdown等文档是否有冲突,下面为git status的结果\033[0m"
            statusResult=$(git status)
            echo "\033[33m \n $statusResult \n \033[0m"
          elif [[ "$compareConfilictResult" != "" ]]; then
            echo "\033[31mrebase发生冲突,下面为git status的结果\033[0m"
            statusResult=$(git status)
            echo "\033[33m \n $statusResult \n \033[0m"
          else
            echo "\033[31m\n发生了其他错误,请查看执行rebase后的结果\n\033[0m"
          fi
    
        fi #if [[ "$rebaseReuslt" = "" ]]; then
    
          return $((1))
      fi #if [[ "$compareResult" != "" ]]
    
    }
    
    function commitAndPush(){
    echo "\033[33m \n --------------- git status --------------  \033[0m"
    git status
    echo "\033[33m \n --------------- git add . --------------  \033[0m"
    git add .
    echo "\033[33m \n --------------- git commit -m '' --------------  \033[0m"
    echo "\033[30m \n 提交的message是什么:\n  \033[0m"
    
    if read -t 300 message
    then
    git commit -m "$message"
    else
    echo "给了你300秒做选择,然而还没有选择,只能重新运行了"
    fi
    
    echo "\033[33m \n --------------- git fetch --------------  \033[0m"
    git fetch
    echo "\033[33m \n --------------- git rebase --------------  \033[0m"
    
    echo "\033[21m\n\n*************************************************\033[0m"
    rebaseReuslt=$(git rebase)
    echo "\033[21m*************************************************\033[0m"
    
    needPush="Y"
    conflictJudegment $rebaseResult $needPush
    
    }
    
    function rebaseContinue(){
    echo "\033[33m \n --------------- git add . --------------  \033[0m"
    git add .
    echo "\033[33m \n --------------- git rebase continue --------------  \033[0m"
    echo "\033[21m\n\n*************************************************\033[0m"
    rebaseContineResult=$(git rebase --continue)
    echo "\033[21m\n\n*************************************************\033[0m"
    
    needPush="Y"
    conflictJudegment $rebaseContineResult $needPush
    }
    
    function dropAll(){
    echo "\033[33m \n --------------- git checkout . & git clean -xdf --------------  \033[0m"
    git checkout .
    git clean -xdf
    }
    
    function pullNewOne() {
      echo "\033[33m \n --------------- git stash --------------  \033[0m"
      git stash
      echo "\033[33m \n --------------- git fetch --------------  \033[0m"
      git fetch
      echo "\033[33m \n --------------- git rebase --------------  \033[0m"
      echo "\033[21m\n\n*************************************************\033[0m"
      rebaseResult=$(git rebase)
      echo "\033[21m\n\n*************************************************\033[0m"
      # echo "\033[31m\n执行rebase后的结果为:\n\n$rebaseResult \n--------------  \033[0m"
    
      needPush="N"
      judegmentResult=$(conflictJudegment $rebaseResult $needPush)
    
      # echo "\033[33m \n -------judegmentResult-------- $? ------judegmentResult end--------  \033[0m"
      #
      # if [[ "$($?)" = "$((1))" ]]; then
      #   echo "\033[33m \n --------更新失败 \n$judegmentResult--------  \033[0m"
      # fi
    
      echo "\033[33m \n --------------- git stash pop --------------  \033[0m"
      echo "\033[21m\n\n*************************************************\033[0m"
      popResult=$(git stash pop)
      echo "\033[21m\n\n*************************************************\033[0m"
    
      # conflictJudegment $popResult $needPush
    }
    
    function gitUpdate() {
    echo "\033[32m 请选择需要的操作: \n 1 : 我要提交代码\n 2 : 我的代码有冲突,解了冲突后需要重新提交 \n 3 : 本地的修改都不要了 \n 4 : 本地有修改不提交,只想同步一下最新代码 \n 5:本地的修改不要了,直接更新代码 \033[0m"
    if read -t 300 -n 1 -p "选择了:" mode
    then
    case $mode in
    1)
    commitAndPush
    ;;
    2)
    rebaseContinue
    ;;
    3)
    dropAll
    ;;
    4)
    pullNewOne
    ;;
    5)
    dropAll
    pullNewOne
    ;;
    esac
    else
    echo "给了你300秒做选择,然而还没有选择,只能重新运行了"
    
    fi
    }
    
    
    cd $(dirname $0)
    pwd
    
    
    
    gitUpdate
    
    

    将文件放在项目目录下,双击运行后效果如下

    屏幕快照 2017-12-14 下午2.16.37.png

    此时可以输入需要做的事情,比如想提交代码则输入1

    屏幕快照 2017-12-14 下午1.59.03.png

    然后输入提交代码的message,回车,就提交代码完毕了。
    当然如果出现冲突,提示了。修复后,重新运行工具选择2就好。
    只是一个取巧的小工具,记录并保存。

    相关文章

      网友评论

        本文标题:git 终端操作小工具

        本文链接:https://www.haomeiwen.com/subject/ygckwxtx.html