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