Git提交shell脚本
开头
随着项目的壮大,产品和设计小姐姐对着项目前端的效果疯狂输出。成吨的psd、效果图、图标呼啸而来。每一次页面更新或者产品改主意都是新的一堆 psd、效果图、图标呼啸而来。以至于本地存在许多类似 首页效果图_3.zip、首页效果图_8.zip。从内网下载下来后还要一顿的解压,覆盖。
xx这怎么能忍!!
所以我就想到用 GIT 去管理这堆效果图和图标。在设计的电脑配好一个Git目录,她每次有新增直接就修改,修改完就提交推送到远程(因为我们不做图,只pull不push,所以不会有冲突),我们再从远程拉下来,这样两边的文件夹就同步了。小姐姐既不需要频繁的打包、压缩、上传。我们开发也不需要频繁的下载、解压、覆盖。
当然,要实现用GIT去管理效果图库这个美好愿景,难度还是有的。最麻烦的就是小姐姐需要能用简单的 Git 命令。
什么?为什么不用sourceTree?
因为我觉得命令行逼格高呀,黑框里快速闪动的光标伴随着其他同事不明觉厉的目光,小姐姐肯定喜欢。
(实际情况并不是,后面她告诉我,她更喜欢用图形界面 ┭┮﹏┭┮)。
然后
虽然是简单的命令,但是对于小姐姐来说也不见得十分容易。所以我就手把手的教她们这些命令以及这些命令执行的意思:
git status
git add
git commit -m
git push
git log
在安静了一个多月后,小姐姐突然小窗告诉我每次打这么多字母太累了,还不如 建文件夹、压缩、上传。
WHATWHAT? 就这么几行代码还闲多?你每天压缩解压,错了还要重发 浪费的时间都够写敲几遍了。
不过说归说,小姐姐有需求我们一定要尽量满足。
(其实是要显地自己很牛逼,能帮她实现她想要的东西,这样下次她想要的效果不好实现也好沟通)
要实现之前的多个命令变成一个,立马就想到了脚本语言(人生苦短,我用Python)。不过小姐姐的电脑就要安装解释器,这么麻烦。
咦,小姐姐不是有git环境吗,直接写个shell脚本给git去跑呀。
(git之所以可以在win下跑Linux命令是因为封装了Cygwin。)
Cygwin是许多自由软件的集合,最初由Cygnus Solutions开发,用于各种版本的Microsoft Windows上,运行类UNIX系统。Cygwin的主要目的是通过重新编译,将POSIX系统(例如Linux、BSD,以及其他Unix系统)上的软件移植到Windows上。
Shell脚本
那我现在就要认真了,记下简单的shell脚本语法。
Shell脚本(英语:Shell script),是一种电脑程序与文字档案,内容由一连串的shell命令组成,经由Unix Shell直译其内容后运作。被当成是一种脚本语言来设计,其运作方式与直译语言相当,由Unix shell扮演命令行直译器的角色,在读取shell脚本之后,依序执行其中的shell命令,之后输出结果。利用shell脚本可以进行系统管理,档案操作等。
首先每个shell 脚本开头可以通过 #! 标识用哪个shell去解释后面出现的脚本内容。
(shell 是解析shell脚本的脚本解释器程序)
#!/bin/bash
echo "Hello World !"
保存这段代码并重命名 hello.sh。完成后修改hello.sh的文件权限,使其具有运行的权限,然后执行 ./hello.sh 。
chmod +x ./hello.sh
./hello.sh
#!/bin/bash
# 打印操作
function printStep(){
echo "### 执行操作【$1】###"
}
#判断 字符串参数1是否包含字符串参数2
function countainStr(){
result=$(echo $1 | grep "${2}")
if [[ "$result" != "" ]]
then
return 1
else
return 0
fi
}
#ADD
echo -e "\n"
printStep "git add"
echo `git add .`
printStep "git status"
echo -e "\n"
statusResult=`git status`
echo $statusResult
# 如果没有文件修改
countainStr $statusResult "nothing to commit"
if [ $? == 1 ]
then
echo "当前文件夹没有被【新建】或【修改】"
exit
fi
# 提交内容为空
message="$1"
if [ "$message" = "" ]
then
echo "请输入提交内容"
read $message
fi
printStep "git commit -m ${message}"
echo `git commit -m ${message}`
printStep "git push"
pushResult=`git push`
# 如果推送远程报错
countainStr $pushResult "fatal: "
if [ $? == 1 ]
then
echo "推送远程小伙伴出错了,请联系开发小哥哥看看哪里出错了"
else
echo "提交完成"
fi