Как использовать учетные данные для работы с nodegit.push в Windows - PullRequest
0 голосов
/ 29 апреля 2019

Редактировать: Я изменяю вопрос в соответствии с моим текущим пониманием проблемы, которая значительно изменилась.

Оригинальное название: Кажется, что Nodegit запрашивает неверные учетные данные при нажатии

При попытке push с использованием кажется, что ничто не работает в Windows (хотя они отлично работают в Linux).

  • Использование SSH
    • sshKeyFromAgent - ошибка аутентификации: сбой соединения агента
    • sshKeyNew - credentials обратный вызов повторяется (выглядит как бесконечный цикл но я не уверен )
    • sshKeyMemoryNew: credentials вызывается дважды, а затем узел выходит без диагностики (события exit и beforeExit для process не сигнализируются)
  • Использование HTTPS
    • userpassPlaintextNew: [Ошибка: неизвестная ошибка проверки сертификата] errno: -17

Ниже следует оригинальный вопрос.


Я пытаюсь получить nodegit до push, и следующий вопрос , кажется, решает эту ситуацию. Однако я не могу заставить его работать.

Я клонировал репозиторий, используя 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» на git@github. [отредактировано] .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
  • версия ноджита 0.24.1
  • пользователь, работающий с узлом, является моим основным пользователем, который при правильном использовании git в командной строке работает

1 Ответ

1 голос
/ 29 апреля 2019

Вместо использования 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
    }
});

...