gpt4 book ai didi

go - git2go 中的 SSH 身份验证

转载 作者:IT王子 更新时间:2023-10-29 01:59:56 26 4
gpt4 key购买 nike

我正在努力学习 Go 作为我的第一门编译语言(来自 php/python)。我的第一个项目是 Bitbucket 的一个小型 POST 钩子(Hook)监听器,它通过 os/exec 获取并 check out Git 存储库。我现在正在尝试用 git2go 替换 os/exec 调用.不过,我在身份验证方面遇到了麻烦。我有以下代码:

package main

import (
git "github.com/libgit2/git2go"
"log"
)

func main() {

_, Cred := git.NewCredSshKey("git","~/.ssh/id_rsa.pub","~/.ssh/id_rsa","")
log.Println(Cred.Type())
gitH,err := git.OpenRepository(".")
if (err != nil) {
log.Fatalln(err)
}
remotes,err := gitH.ListRemotes()
if (err != nil) {
log.Fatalln(err)
}
log.Println(remotes)
origin,err := gitH.LoadRemote("origin")
if (err != nil) {
log.Fatalln(err)
}
err = origin.Fetch(nil,"")
if (err != nil) {
log.Fatalln(err)
}
}

当我运行它时,我得到需要身份验证但没有设置回调

查看 docs ,看起来我需要添加对 origin.SetCallbacks() 的调用,它需要一个 RemoteCallbacks 结构。 RemoteCallbacks 具有函数 CredentialsCallback,它返回一个 int 和一个 Cred 指针。由于 NewCredSshKey 返回相同的值,我尝试添加以下内容:

var cb git.RemoteCallbacks
cb.CredentialsCallback = git.NewCredSshKey("git","~/.ssh/id_rsa.pub","~/.ssh/id_rsa","")
origin.SetCallbacks(cb)

这给出了错误 multiple-value git.NewCredSshKey() in single-value context不能在函数参数中使用 cb(类型 git.RemoteCallbacks)作为类型 *git.RemoteCallbacks

我想我完全误解了它是如何工作的,而且我还没有找到任何使用这个库的例子。非常感谢一些示例的提示或指针。

最佳答案

一些事情:

CredentialsCallback 需要设置为与其签名相匹配的函数,而不是此类函数的输出。但是,NewCredSshKey 的签名一开始就不正确,只有它的返回值匹配。正确的签名是:

func(url string, username_from_url string, allowed_types CredType) (int, *Cred)

第二个错误 cannot use cb (type git.RemoteCallbacks) as type *git.RemoteCallbacks 是因为你需要一个指向 RemoteCallbacks 的指针。

要么将其声明并初始化为指针:

cb := &git.RemoteCallbacks{}
// or alternatively
// cb := new(git.RemoteCallbacks)

或者将地址作为参数传递:

origin.SetCallbacks(&cb)

关于go - git2go 中的 SSH 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25085436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com