1

我正在尝试通过创建新的 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();
    });

  });

提前致谢。

4

2 回答 2

1

这与Running shell script in rails only output the 1 line 有关,但似乎--progress描述的选项不受git submodule. 您应该能够通过让Git进程从当前进程继承stderr文件描述符来获得所需的进度输出(可能同时抛出stdout),根据child_process文档可以这样完成:

var git = spawn(
  'git', 
  ['submodule', 'add', 'git://github.com/PathTo/Submodule.git', 'submodule'],
  { stdio: ['pipe', process.stdout, process.stderr] );
于 2014-02-02T02:18:24.373 回答
0

如果您的代码在 shell 上运行,那么我相信 using{ 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 并输出进度信息。

于 2014-02-02T02:18:30.403 回答