4

私はgit shortlogこの方法でnodejsを使用してリポジトリで結果を取得しようとしています:

var exec = require('child_process').exec;
exec("cd /tmp/"+folder +" && git shortlog", {maxBuffer: 500*1024}, function(error, stdout, stderror){
    console.log(arguments);
});

私のコールバックはこのメソッドで呼び出されることはありません。プログラムは何かを無期限に処理しているように見えます。

プロンプトでこのコマンドを起動すると、結果が表示されます。

結果をファイルにリダイレクトしようとすると、空のファイルが作成されます。

"cd /tmp/"+folder +" && git shortlog > stats.txt"

しかし、git log代わりに使用すると、結果が得られます。

私のコールバックが呼び出されない理由を知っていますgit shortlogか?

編集:spawnを使用して同じ結果が得られました:

exec("cd /tmp/"+folder, function(err){
    if(err){
        throw err;
    }

    var shortlog = spawn('git', ['shortlog']);
    shortlog.stdout.on('data', function (data) {
        console.log('stdout: ' + data);
    });

    shortlog.stderr.on('data', function (data) {
        console.log('stderr: ' + data);
    });

    shortlog.on('close', function (code) {
        console.log('child process exited with code ' + code);
    });
});

編集2:process.chdir()は何も変更しません:

process.chdir('/tmp/'+folder);
var shortlog = spawn('git', ['shortlog']);
shortlog.stdout.on('data', function (data) {
        console.log('stdout: ' + data);
});
4

2 に答える 2

19

git shortlog標準入力から何かを読み取る必要があると考えているため、無期限に待機します。これを試して:

exec('git shortlog < /dev/tty', { cwd : "/tmp/" + folder }, function(err, stdout, stderr) {
  console.log(arguments);
});
于 2013-03-22T08:45:53.630 に答える