我正在尝试通过创建一个新的yeoman生成器为新项目设置锅炉板,我需要做的一件事就是将一个大型Git存储库设置为子模块,然后在某个标签处检出。我有一切工作,但我想提供一些关于结账的进展反馈。
当您手动运行submodule add
时,您会更新如下:
Receiving objects: 14% (22925/163744), 5.41 MiB | 1.30 MiB/s
我希望在我的节点脚本子模块添加期间显示该输出,但我似乎无法让它显示任何内容。这就是我所拥有的:
MyGenerator.prototype.addSubmodule = function() {
var done = this.async();
console.log('Initializing submodule. This may take a minute.');
var git = spawn('git', ['submodule', 'add', 'git://github.com/PathTo/Submodule.git', 'submodule']);$
git.stdout.on('data', function(data){
console.log(data);
});
git.stderr.on('data', function(data){
console.log(data);
});
git.on('close', function(){$
process.chdir('submodule');$
console.log('Checking out %s branch of Submodule', this.submoduleVersion);
var checkout = spawn('git', ['checkout', this.submoduleVersion]);
checkout.stdout.on('data', function(data) {
console.log(data);
});
checkout.on('close', function() {
process.chdir('../');
done();
});
});
提前感谢。
答案 0 :(得分:1)
这与Running shell script in rails only outputs the 1 line有关,但似乎--progress
所描述的git submodule
选项不受var git = spawn(
'git',
['submodule', 'add', 'git://github.com/PathTo/Submodule.git', 'submodule'],
{ stdio: ['pipe', process.stdout, process.stderr] );
支持。您应该能够通过让Git进程从当前进程继承stderr文件描述符(可能同时在stdout中抛出)来获得所需的进度输出,根据child_process documentation可以像这样:
{{1}}
答案 1 :(得分:0)
如果您的代码是在shell上运行的,那么我相信使用{ stdio: 'inherit'}
会修复它:
var git = spawn('git', ['submodule', 'add',
'git://github.com/PathTo/Submodule.git', 'submodule'],
{ stdio: 'inherit' });
说明:通过bash shell中的测试,我发现如果git认为它没有与tty通信,它就不会输出任何进度信息。如果您的软件是从shell运行的,并告诉spawn
只是将stdin
,stdout
和stderr
传递给子进程,那么孩子应该看到tty和输出进度信息。