我试图从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中运行时实现相同的目标?
答案 0 :(得分:0)
我设法使用detached: true
函数的spawn
属性来实现此功能:
var command = spawn('git', ['credential', 'fill'], { detached: true });
根据Node documentation,detached
选项使生成的进程成为新进程组的领导者。这似乎欺骗了Git认为不应该在TTY上要求用户名/密码。
更新:上述内容似乎仅适用于在Mac OS X上运行代码。在Windows上,detached
选项会导致生成的程序在第二个命令窗口中运行,并且它看起来像调用和生成的程序之间的stdin / stdout连接不起作用。