1

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

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

当尝试push使用时,似乎在 Windows 上没有任何效果(虽然它们在 Linux 上运行良好)。

  • 使用 SSH
    • sshKeyFromAgent-验证错误:连接代理失败
    • sshKeyNew-credentials回调是重复的(看起来像一个无限循环,但我不能确定
    • sshKeyMemoryNew:credentials被调用两次,然后节点退出,没有诊断(exitbeforeExit事件process没有发出信号)
  • 使用 HTTPS
    • userpassPlaintextNew[错误:未知证书检查失败] errno:-17

原始问题如下。


我正在尝试解决nodegitpush以下问题似乎解决了这种情况。但是我无法让它工作。

我已经使用 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);
}

我得到以下输出:

Push 在 git@github 上要求提供“git”的凭据。[已编辑] .net:motti/tmp.git
错误:{错误:错误身份验证:连接代理失败 errno:-1,errorFunction:'Remote.push'}

如果我尝试将motti硬编码到sshKeyFromAgent函数中,错误将变为:

错误:{错误:用户名与先前的请求不匹配 errno:-1,errorFunction:'Remote.push'}

这是我第一次尝试以编程方式使用 git,所以我可能会遗漏一些基本的东西......

回答评论中的一些问题:

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

2 回答 2

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
    }
});

于 2019-04-29T17:36:06.097 回答
-1

您需要在本地运行 ssh 代理并将密码保存在那里。请按照以下步骤使其工作:

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

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

于 2021-07-20T08:53:11.670 回答