由于最近的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.)
npm install simple-git
const git = require('simple-git/promise');
//这里解释一下为什么是simple-git/promise
//是因为接下来的每一个git操作都是异步的,所以可以结合async/await使用(即使用promise)
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