终端研发部

git 终端操作小工具

2017-12-14  本文已影响16人  Dawn_wdf

公司项目使用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就好。
只是一个取巧的小工具,记录并保存。

上一篇下一篇

猜你喜欢

热点阅读