likes
comments
collection
share

基于Node.js打造一个CLI,让你的git操作更加丝滑

作者站长头像
站长
· 阅读数 8

基于Node.js打造一个CLI,让你的git操作更加丝滑

背景

在公司项目使用git管理代码记录的背景下,每当我的需求进入了提测阶段,测试总能从我的代码中找出一堆bug(什么,你写的代码从来没有bug?那我先叫你声大佬)。在这个阶段,一般我们要做的就是在需求分支中修复bug,然后切到测试分支,合并我们的功能分支,最后推送测试分支到远程触发自动构建和部署。如果过一会测试又发现了新的bug,那么就得继续重复上述的步骤。

你发现了没有,每当我们修复了bug,合并到测试分支时,存在着极其重复而又繁琐的分支操作环节:

  1. git checkout 切到测试分支。
  2. git merge 合并我们刚刚修复的功能分支。
  3. git push 推送到远程。
  4. git checkout 切回功能分支。

这4个步骤贯穿着我们修复bug生涯的最后一环。而且当功能分支很长又难记时,你是不是得偷偷看看分支名,或者复制粘贴一下到命令行,简直是令人抓狂。

不习惯敲命令的一些同学,会使用图形界面对分支进行操作,不过这样的话手就不得不离开键盘,用鼠标去点点点。

俗话说得好:浪费时间,就是浪费生命。

有一天我突发奇想,如果能有一个CLI工具,帮我自动操作分支的合并,让我从这个重复又繁琐的操作中解放出来,那我岂不是能做很多其他的事情了(摸鱼)。虽然一次的自动操作可以节省几秒钟,但是千万不要小看了这几秒钟,日积月累之下难以想象它能给你带来多少收益,正所谓水滴能把石穿透。

想到这里我就马不停蹄地投入到这个CLI工具的研发之中。。。

下面我们介绍一下这个工具的使用,看他是如何解放你的双手的。

工具使用介绍

接下来我隆重介绍一下基于Node.js的mg-cli这个CLI。

全局安装@johnhom/mg-cli

npm install -g @johnhom/mg-cli

# 或者
# yarn global add @johnhom/mg-cli

全局安装完成之后,我们就可以在终端命令行里运行amg这个命令。

具体的用法:

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

上述命令执行后,终端会自动按进行如下操作:

  1. 在当前分支执行git pull
  2. 获取当前分支的名称
  3. 切换到目标分支dev
  4. 执行git pull
  5. 合并分支
  6. 询问是否要推到远程
  7. 询问是否要切回源分支

我们来看看运行的gif图:

nice!一行命令就能轻松解决你的需求分支合并的操作。

自动合并过程中如果遇到了冲突

假设在合并分支的过程中遇到了冲突,mg-cli会识别到冲突,并且中断后续的操作,最后提示你需要处理,如下图所示:

基于Node.js打造一个CLI,让你的git操作更加丝滑

后续也可以进行优化,在遇到了冲突之后可以等待用户修复了冲突,继续进行后续的步骤。

实现原理

原理其实也特别的简单,其实就是使用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);
});

运行以上代码之后:

基于Node.js打造一个CLI,让你的git操作更加丝滑

以上就是一个简单的例子,通过child_process模块衍生一个shell进程,然后在该进程中执行了git branch命令,完成之后把命令输出的内容作为stdout放入回调函数中。

一般我们都会使用第三方库shelljs来代替child_process,它提供了更高级的API和更简洁的语法,适用于执行简单的Shell命令和一些常见的文件和目录操作。

总结

通过这次git工具的开发呢,让我发现在编程生涯中,其实很多重复的事情,其实都可以通过写一个Node.js的程序去处理和解决,以此解放我们的双手,极大地提升工作的效率。只要你敢想,然后动手造出来。

其实工具并不缺乏,缺乏的只是你的想象力还有珍贵的行动力。

喜欢这个mg-cli,并且实际帮助到了你的话,可以给个点赞或者star,如果有什么更好的建议,也欢迎留个issue让它变得更好哟,下面我会贴上相关的链接。

相关的工具链接

转载自:https://juejin.cn/post/7274140856034361396
评论
请登录