Можно ли настроить s sh ключи для работы из go программы для git команд? - PullRequest
1 голос
/ 02 марта 2020

Я не могу запустить git pull --tags из Go exe c. Команда, поскольку у меня нет прав доступа ..

Код ...

func SimpleCommand(start string, args ...string) (result string) {
    cmd := exec.Command(start, args...)

    //cmd.Dir = dir
    bytes, err := cmd.Output()
    if err != nil {
        fmt.Print(err)
    }
    s := string(bytes)

    return s

}
func main() {
    SimpleCommand("git", "pull", "--tags")


}

Обычно, когда я запускаю git команды, я делаю это вручную в Git - bash, и у меня есть настройки файла .bashr c следующим образом ...

 eval $(ssh-agent -s) 
 ssh-add c:/sshkeys/id_rsa 
 ssh-add c:/sshkeys/github

Это работает нормально, но я, когда я запускаю команду git из с в Go программе. Очевидно, что эти команды не запускаются. Таким образом, я получаю следующую ошибку ...

git@gitlab.com: В доступе отказано (publickey). Неустранимый: не удалось прочитать из удаленного хранилища.

Пожалуйста, убедитесь, что у вас есть правильные права доступа, и хранилище существует.

Однако я попытался выполнить эту команду по отдельности, используя функцию SimpleCommand она не может найти команду eval (она не является исполняемым файлом),

Я также считаю, что должен быть лучший способ сделать это, если я не могу заставить программу go управлять s sh, чтобы использовать их для запуска команд git.

1 Ответ

1 голос
/ 03 марта 2020

Не знал о core.sshCommand, теперь это работает для меня.

Настройка Текущее репо для использования ключа s sh в указанном месте c ...

Функция настройки ...

func SetupGitSsh() {
    sshKeysDir := "c:/sshkeys/id_rsa"
    sshloc := fmt.Sprintf("ssh -i %s", sshKeysDir)
    DirCommand("git", "c:\\DEV\\outsideprj", "config", "core.sshCommand", sshloc)
}

Функция DirCommand ...

func DirCommand(app string, dir string, args ...string) {

    cmd := exec.Command(app, args...)
    cmd.Dir = dir
    stdout, err := cmd.Output()

    if err != nil {
        fmt.Println(err.Error())
        return
    }

    fmt.Print(string(stdout))
}
...