3

我想用 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);
4

2 回答 2

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 是var myProcessor = require('./path/to/above/code/file');上述代码片段所需的变量名(类似于 )。

于 2013-08-06T18:06:44.103 回答
2

不,那行不通...看起来您正在结合 DOS shell 命令和 Unix shell 命令。特别c:\是 DOS,使用 && 链接命令是 Unix shell。您使用的是哪个环境?

如果您正在使用,DOS那么您需要制作一个.bat并调用批处理。这很好,因为您可以使用参数。

于 2013-08-06T18:06:55.793 回答