编辑:我正在更改问题以适合我目前对已发生重大变化的问题的理解。
原始标题: Nodegit似乎在推送时要求输入错误的凭据
当尝试使用nodegit push
时,在Windows上似乎没有任何作用(而在Linux上则可以正常工作)。
sshKeyFromAgent
-身份验证错误:连接代理失败 sshKeyNew
-credentials
回调反复出现(看起来像一个无限循环
但是I can't be sure)sshKeyMemoryNew
:credentials
被调用两次,然后节点退出且没有诊断(exit
上的beforeExit
和process
事件未发信号)< / li>
userpassPlaintextNew
: [错误:未知证书检查失败]错误号:-17 原始问题如下。
我正在尝试将nodegit
提高到push
,以下question似乎可以解决这种情况。但是我无法使其正常工作。
我已经使用SSH克隆了一个存储库,当我尝试推送时,我的credentials
回调是由用户 git 而不是 motti 调用的(是实际的git用户)。
try {
const remote = await repository.getRemote("origin");
await remote.push(["refs/head/master:refs/heads/master"], {
callbacks: {
credentials: (url, user) => {
console.log(`Push asked for credentials for '${user}' on ${url}`);
return git.Cred.sshKeyFromAgent(user);
}
}
});
}
catch(err) {
console.log("Error:", err);
}
我得到以下输出:
在git @ github上要求输入'git'的凭据。 [已编辑] .net:motti / tmp.git
错误:{错误:错误身份验证:连接代理错误号errno:-1,错误功能:'Remote.push'}
如果我尝试将 motti 硬编码为sshKeyFromAgent
函数,错误将变为:
错误:{错误:用户名与先前的请求错误号不符:-1,错误功能:'Remote.push'}
这是我第一次尝试以编程方式使用git,因此我可能会缺少一些基本知识...
回答评论中的一些问题:
答案 0 :(得分:1)
您可以使用git.Cred.sshKeyFromAgent
并传递您的用户名/密钥,而不是使用git.Cred.sshKeyNew
。
const fs = require('fs');
// ...
const username = "git";
const publickey = fs.readFileSync("PATH TO PUBLIC KEY").toString();
const privatekey = fs.readFileSync("PATH TO PRIVATE KEY").toString();
const passphrase = "YOUR PASSPHRASE IF THE KEY HAS ONE";
const cred = await Git.Cred.sshKeyMemoryNew(username, publickey, privatekey, passphrase);
const remote = await repository.getRemote("origin");
await remote.push(["refs/head/master:refs/heads/master"], {
callbacks: {
credentials: (url, user) => cred
}
});
答案 1 :(得分:0)
您需要在本地运行 ssh 代理并将您的密码保存在那里。请按照以下步骤操作:
我希望这会有所帮助,因为我也为此付出了很多努力,而且可能会非常令人沮丧。