效率是很重要的。将重复繁琐的事情交给计算机处理,工作效率变高的同时也解放了我们自己。
使用过git工具的同学应该很认可它,因为这个工具给软件版本管理任务带来巨大的便利。在工作中,我遇到以下两个问题。
1、git 提交代码把其他分支的merge到当前分支案例。
假如git库有分支a和b,本地库的分支为b分支,修改代码后commit,然而push的时候push到a分支。这样的话会把b分支的一些其他提交也给merge到a分支上。
2、手动添加reviewer
提交代码后需要在浏览器中添加reviewer,网站的访问速度较慢。
面对上面的问题我想通过设计一个shell脚本。这个脚本可以自动判断当前分支并完成提交,同时可以接收参数,参数是reviewer的邮箱前缀。
首先创建一个名为gitpush.sh的脚本文件。
注意事项:
- .sh脚本在windows系统下编写的,可能有不可见字符。脚本编写完后,特别要注意脚本的格式,否则可能会报bad interpreter: No such file or directory异常。通过命令set ff=unix 或 set fileformat=unix修改。
- 需要给这个.sh添加可运行权限: chmod u+x gitpush.sh。
下面是脚本的内容。
#!/bin/bash
这行要写上。是指此脚本使用/bin/bash来解释执行。
#获取当前分支
current=`git branch -a | grep \*`
上面的行命令中的符号`,在键盘Tab键上面,数字键1左侧。命令 git branch -a | grep * 在shell终端中执行后输出【* 当前的分支名】。但是在脚本中运行时,current中存储了当前git库中的所有目录和文件名,最后一个是当前的分支名。(不知道为什么)
current_branch=${current##* }
这行命令就是从current字符串最后一次出现空格的位置开始,截取空格右边的所有字符。
echo -e "Current branch is ""\033[33m$current_branch\033[0m"
这句话,就是让current_branch以黄色显示。
current_remote=`git remote`
获取远程仓库名。
git push $current_remote HEAD:refs/for/$current_branch%r=$1@email.com,r=$2@email.com
unset current
unset current_remote
unset current_branch
获取到需要的参数后,就可以提交代码了。$0是脚本的名字,我们不需要。这里的$1和$2是运行此脚本输入的参数,比如:
root:~/MyDemo# .gitpush.sh zhangsan lisi