使用这个git工具,让你的工作效率大幅上升
背景
在公司项目使用git管理代码记录的背景下,每当我的需求进入了提测阶段,测试总能从我的代码中找出一堆bug(什么,你写的代码从来没有bug?那我先叫你声大佬)。一般我们要做的就是在需求分支中修复bug,然后切到测试分支,合并我们的功能分支,最后推送测试分支到远程触发自动构建和部署。如果过一会测试又发现了新的bug,那么就得继续重复上述的步骤。
你发现了没有,每当我们修复了bug,合并到测试分支时,存在着极其重复而又繁琐的分支操作环节:
git checkout
切到测试分支。git merge
合并我们刚刚修复的功能分支。git push
推送到远程。git checkout
切回功能分支。
这4个步骤贯穿着我们修复bug生涯的最后一环。而且当功能分支很长又难记时,你是不是得偷偷看看分支名,或者复制粘贴一下到命令行,简直是令人抓狂。
不习惯敲命令的一些同学,会使用图形界面对分支进行操作,不过这样的话手就不得不离开键盘,用鼠标去点点点。
俗话说得好:浪费时间,就是浪费生命。
有一天我突发奇想,如果能有一个CLI工具,帮我自动操作分支的合并,让我从这个重复又繁琐的操作中解放出来,那我岂不是能做很多其他的事情了(摸鱼)。虽然一次的自动操作可以节省几秒钟,但是千万不要小看了这几秒钟,日积月累之下难以想象它能给你带来多少收益,正所谓水滴能把石穿透。
想到这里我就马不停蹄地投入到这个CLI工具的研发之中。。。
下面我们介绍一下这个工具的使用,看他是如何解放你的双手的。
工具使用介绍
全局安装@johnhom/mg-cli
:
npm install -g @johnhom/mg-cli
# 或者
# yarn global add @johnhom/mg-cli
全局安装完成之后,我们就可以在终端命令行里运行amg
这个命令。
使用方法:
假设你当前项目所在的分支为:feature/a
,你想要把这个分支合并到dev
,你只需要执行以下命令:
amg dev
上述命令执行后,终端会自动按进行如下操作:
- 在当前分支执行
git pull
- 获取当前分支的名称
- 切换到目标分支dev
- 执行
git pull
- 合并分支
- 询问是否要推到远程
- 询问是否要切回源分支
我们来看看运行的gif图:
nice!
下面展示具体的用法:
Usage:
$ amg [target_branch]
Commands:
[target_branch] merge current branch into target_branch
For more info, run any command with the `--help` flag:
$ amg --help
Options:
-h, --help Display this message
-v, --version Display version number
Examples:
amg master 把当前分支自动合并到master
假设你当前项目所在的分支为:feature/a,你想要把这个分支合并到dev,并自动上传到远程仓库,你只需要执行以下命令:
amg dev
自动合并过程中如果遇到了冲突
假设在合并分支的过程中遇到了冲突,mg-cli
会识别到冲突,并且中断后续的操作,最后提示你需要处理,如下图所示:
实现原理
原理其实也特别的简单,其实就是使用Node.js自带的child_process
模块创建子进程来执行一些shell
的命令。
下面我们看一个简单的使用例子:
const childProcess = require('child_process');
// 在子进程中执行git branch
childProcess.exec('git branch', (error, stdout, stderr) => {
if (error) {
console.error(error);
return;
}
// 输出子进程运行之后的输出内容
console.log('----------johnhomLogDebug stdout\n', stdout);
});
运行以上代码之后:
以上就是一个简单的例子,通过child_process
模块衍生一个shell进程,然后在该进程中执行了git branch
命令,完成之后把命令输出的内容作为stdout
放入回调函数中。
一般我们都会使用第三方库shelljs来代替child_process
,它提供了更高级的API和更简洁的语法,适用于执行简单的Shell命令和一些常见的文件和目录操作。
总结
通过这次git工具的开发呢,让我发现在编程生涯中,其实很多重复的事情,其实都可以通过写一个Node.js的程序去处理和解决,以此解放我们的双手,极大地提升工作的效率。只要你敢想,然后动手造出来。
其实工具并不缺乏,缺乏的只是你的想象力还有珍贵的行动力。