1

此代码适用于 Windows 和 Mac OS X:

var exec = require( 'child_process' ).exec
exec( 'git clone git@github.com:user/myrepo.git' )

但是这段代码在 Windows 上运行时从 git 返回“拒绝访问(公钥)”错误,但在 Mac OS X 上则没有:

var spawn = require( 'child_process' ).spawn
 ,  child = spawn( 'git', [ 'clone', 'git@github.com:user/myrepo.git' ], { env: process.env } )

child.on.stderr( 'data', function( data ) { 
  console.log( data.toString() )
})

我假设spawn我正在失去与~/.ssh……的联系,但我认为发送process.env会起作用。顺便说一句,git clone直接输入命令提示符时,这些命令在 Windows 上运行良好。

有什么明显的错误吗?

4

2 回答 2

1

不是节点问题,而是git问题。将 Windows 上的 git 从 1.7.11 升级到 1.8.3 并且生成工作。

于 2013-07-19T03:05:27.870 回答
0

我想环境变量在经典的 node.jsspaw()函数中丢失了,尤其是HOME(在 Windows 中默认情况下没有定义,并且是 ssh 找到它的键所必需的)

也许像win-spawn这样的 spawn会更好:

生成node.js但无论您使用哪种操作系统都可以正常工作。如果您想将 spawn 与 JavaScript 文件一起使用,请使用此选项。

它通过在 Windows 上显式调用节点来工作。
它还通过尝试使用 regex 解析命令来填充对环境变量设置的支持。
由于所有修改都包含在 中if (os === 'Windows_NT'),因此可以在非 Windows 系统上安全使用,并且不会破坏任何内容。

于 2013-07-16T06:23:46.827 回答