我想使用child_process从nodeJS进行git pull,commit和push - 这假设有效吗?
var cmd = require('child_process');
var commmandString = "cd c:\\xampp\\htdocs\\MenuMakerServer\\experiments\\editormenu && git commit -am 'menu.json changes' && git push origin main";
cmd.exec(commmandString , function (error: any, stdout, stderr) {
if (error) {
callback(error.stack, null);
}
});
编辑:
行, 我设法让这个工作:
var sys = require('sys')
var exec = require('child_process').exec;
function puts(error, stdout, stderr) { sys.puts(stdout) }
var options = {cwd:"c:\\xampp\\htdocs\\MenuMakerServer\\projects\\editormenu"};
exec("git status && git pull && git commit -am 'menu changed' && git push", options, puts);
答案 0 :(得分:3)
定义node.js模块,如下面的代码。
exports.series = function(cmds, callback){
var execNext = function(){
exports.exec(cmds.shift(), function(error){
if (error) {
callback(error);
} else {
if (cmds.length) execNext();
else callback(null);
}
});
};
execNext();
};
然后你可以运行它:
myProcessor.series([
'cd c:\\xampp\\htdocs\\MenuMakerServer\\experiments\\editormenu'
'git commit -am "menu.json changes"',
'git push origin main '
], function(err){
console.log('executed many commands in a row');
});
注意:这里的myProcessor是上面代码片段的require变量名称(类似于var myProcessor = require('./path/to/above/code/file');
)。
答案 1 :(得分:1)
不,这不会起作用......看起来你正在结合DOS shell命令和Unix shell命令。特别是c:\
是DOS并使用&&链命令是Unix shell。你在使用哪种环境?
如果您使用DOS
,则需要制作.bat
并调用批次。这很好,因为你可以使用参数。