我尝试使用库nodegit(版本0.2.4)和ssh从node.js中的teamforge服务器克隆git存储库。 我们的服务器请求用户进行身份验证,当我尝试仅使用克隆方法而不传递选项时,我收到错误:"回调无法初始化SSH凭据"。
我在private.key和public.key文件中有私钥和公钥。它们位于我在web风暴中设置为工作目录的目录中,因此位置不应成为问题。
没有找到如何做到的例子(也许我错过了),但是下面的代码是我最接近的:
'use strict';
var nodegit = require("nodegit"),
Clone = nodegit.Clone,
cred = nodegit.Cred;
var options = {
remoteCallbacks: {
credentials: function () {
return cred.sshKeyNew('user', 'public.key', 'private.key', '');
}
}
};
Clone.clone("ssh://user@teamforgeserver.net/reponame", "localTmp", options)
.then(function(repo) {
var r = repo;
},
function(err){
var e = err;
}
);
我收到此错误:
TypeError: Object #<Object> has no method 'isFulfilled' at value
(c:\...\proj\node_modules\nodegit\node_modules\nodegit-promise\lib\core.js:36:15)
您是否暗示可能出现的问题或一般如何做?
答案 0 :(得分:4)
这是创建新ssh密钥的错误。我创建了一个问题here来跟踪它。
与此同时,如果您正在运行SSH代理,则可以从中获取凭据。
'use strict';
var nodegit = require("nodegit"),
Clone = nodegit.Clone,
cred = nodegit.Cred;
var options = {
fetchOpts: {
remoteCallbacks: {
credentials: function (url, userName) {
// this is changed from sshKeyNew to sshKeyFromAgent
return cred.sshKeyFromAgent(userName);
}
}
}
};
Clone.clone("ssh://user@teamforgeserver.net/reponame", "localTmp", options)
.then(function(repo) {
var r = repo;
},
function(err){
var e = err;
}
);
在v0.2.4中对我有用。如果您需要更多实时支持,请随时与我们聊聊our gitter channel。
更新:我刚刚在Pull Request #334上添加了此修复程序。测试通过后,我将把它放在master上,然后问题中的代码应该可以正常工作。