运行git凭证填充时,请避免使用用户名/密码提示

时间:2014-11-11 08:59:37

标签: node.js git shell

我试图从Node.js程序运行git credential fill命令。我想用它来检查给定URL是否存在存储的用户名/密码。如果有,我解析git credential命令的输出( stdout )以获取存储的用户名和密码。

如果操作系统凭证助手没有存储URL的用户名/密码,我希望程序以静默方式终止。不幸的是,这不起作用。从shell运行我的程序时,git credential fill命令在终端中要求输入用户名和密码:

$ git credential fill
url=http://foo.foo

Username for 'http://foo.foo': ^C

在上面的示例中,我按 Ctrl + C 停止执行,因为我对输入用户名/密码不感兴趣。

有没有办法运行git credential fill,以便在没有用户名/密码的情况下不要求用户名/密码,只是静默终止?

当我使用git credential fill函数从Node.js程序调用{​​{1}}时,会发生同样的情况:

child_process.spawn

从标准bash shell运行时,会发生同样的情况,它会再次询问用户名/密码。

当我使用其运行模式从WebStorm IDE内部运行上述程序时,git凭证程序不会要求输入用户名/密码,它只是静默终止。看起来WebStorm在不支持用户输入的shell中运行此程序。有没有办法在shell中运行时实现相同的目标?

1 个答案:

答案 0 :(得分:0)

我设法使用detached: true函数的spawn属性来实现此功能:

var command = spawn('git', ['credential', 'fill'], { detached: true });

根据Node documentationdetached选项使生成的进程成为新进程组的领导者。这似乎欺骗了Git认为不应该在TTY上要求用户名/密码。

更新:上述内容似乎仅适用于在Mac OS X上运行代码。在Windows上,detached选项会导致生成的程序在第二个命令窗口中运行,并且它看起来像调用和生成的程序之间的stdin / stdout连接不起作用。