如何在Windows上使用凭据与nodegit.push配合使用

时间:2019-04-29 14:07:34

标签: javascript node.js windows git nodegit

编辑:我正在更改问题以适合我目前对已发生重大变化的问题的理解。

原始标题: Nodegit似乎在推送时要求输入错误的凭据

当尝试使用 push时,在Windows上似乎没有任何作用(而在Linux上则可以正常工作)。

  • 使用SSH
    • sshKeyFromAgent-身份验证错误:连接代理失败
    • sshKeyNew-credentials回调反复出现(看起来像一个无限循环 但是I can't be sure
    • sshKeyMemoryNewcredentials被调用两次,然后节点退出且没有诊断(exit上的beforeExitprocess事件未发信号)< / li>
  • 使用HTTPS
    • 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,因此我可能会缺少一些基本知识...

回答评论中的一些问题:

  • 我正在Windows 10上运行
  • 节点v8.9.4
  • git版本2.15.0.windows.1
  • nodegit版本0.24.1
  • 运行用户的节点是我的主要用户,当我在命令行中使用git时,它可以正常工作

2 个答案:

答案 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 代理并将您的密码保存在那里。请按照以下步骤操作:

  1. 在本地启用 ssh 代理(在 OS X 上自动运行):https://code.visualstudio.com/docs/remote/troubleshooting#_setting-up-the-ssh-agent
  2. 在运行 nodegit 操作时在同一 CLI 中运行“ssh-add”并输入密码

我希望这会有所帮助,因为我也为此付出了很多努力,而且可能会非常令人沮丧。