当前位置: 首页 > 工具软件 > JS-Git > 使用案例 >

simple-git

狄兴业
2023-12-01

simple-git

由于最近的node.js项目中需要用到simple-git,主要是为了在node应用中执行git的相关命令。所以对它进行了小小的研究,以下是我结合官方文档对simple-git的认识,希望可以帮助到大家。

首先simple-git是一个轻量级接口,它使得在node应用中也可以操作git,执行各种git命令。(官网解释哈:A light weight interface for running git commands in any node.js application.)

怎么用simple-git

  1. 安装
npm install simple-git
  1. 在此之前要把git装好啦
  2. 在项目中引入simple-git
const git = require('simple-git/promise');
//这里解释一下为什么是simple-git/promise
//是因为接下来的每一个git操作都是异步的,所以可以结合async/await使用(即使用promise)
  1. 开始用啦
const GIT_REPOSITORY_ROOT = 'D:/yourProjectGetFromGit'
//这个路径是你从git上拉下来的代码存放的路径,自己定义就好
simpleGit = git(GIT_REPOSITORY_ROOT );
//以下的所有命令都是基于这个repository的路径进行操作了
await simpleGit.status();
//等价于 git status
await simpleGit.pull('origin', 'master');  
// 等价于 git pull origin marster (第一个参数是你的remote端名称, 第二个参数是你的分支名称)
await simpleGit.checkout('master');
// 等价于 git checkout master (master 指的是你的分支名称)
await simpleGit.add('./*');
// 等价于  git add ./*
await simpleGit.commit('first commit!');
// 等价于 git commit -m 'first commit!'
await simpleGit.push('origin', 'master');
// 等价于 git push origin master (origin指的是你的remote端名称, master指的是你的分支名称)
await simpleGit.mergeFromTo('from', 'to');
// 将from分支上的代码合并到to分支上去
//这里例举几个特别的
await simpleGit.revparse(['HEAD']);
//等价于 git rev-parse HEAD,获得最近一次提交的commit hsah
await simpleGit.rm([path, '-r', '-f']);
// 这里要注意的是, 所有的参数包括路径以及options都要像这个例子中一样放在数组里面
await simpleGit.checkout([commitHash, path]);
// 这个主要是利用commithash结合checkout命令回退代码,真的挺好用的

更新…2019/11/21

最近有新需求,模仿git 命令行窗口,在UI界面展示一个类似于直接操作git的窗口,想着要一个个封装git命令还是真的很不方便,认真又看了一遍官方文档,发现还真有直接可以解析前端输入的git命令,就是git().raw()啦,看如下代码实现:

const git = require('simple-git/promise');
const gitConsole = (req, res) => {
		/**  
		 * gitPath 用来初始化路径, 比如需要执行git clone之类的命令就需要指定路径啦
		 * gitCommand从前端传来是一个字符串, 而git().raw()需要传入一个数组,并且是不需要git前缀的,
		 * 比如你想执行git clone -b master test@hnust.git , 
		 * 最终git().raw()需要传入的参数应该是['clone','-b','master','test@hnust.git']
		 */
        const { gitPath, gitCommand } = req.body;
        // format command to array and remove prefix 'git'
        const commands = gitCommand.trim().split(/\s+/).slice(1);
        // exec git command
        git(gitPath).raw(commands)
            .then(data => {
              	// 此处可以利用socket.io去实现实时推送消息给前端,以达到模拟git的命令行窗口
                res.send({ result: 'SUCCESS' });
            })
            .catch(error => {
                res.send(error);
            });
    };

最后贴上git().raw()的源码供大家学习:

 	  /**
       * Executes any command against the git binary.
       *
       * @param {string[]|Object} commands
       */
      raw(commands: string | string[]): Promise<string>;

暂时先总结到这里啦!以后遇到再继续添加,如有疑问也可以留言的哦!
reference:
[1]: https://cnpmjs.org/package/simple-git

 类似资料: