为了账号安全,请及时绑定邮箱和手机立即绑定

使用go-git从GitHub Enterprise克隆存储库

使用go-git从GitHub Enterprise克隆存储库

Go
慕盖茨4494581 2021-03-28 17:19:53
我试图用来go-git从GitHub Enterprise克隆存储库。为此,我将HTTPS协议与访问令牌一起使用,该访问令牌对我的存储库具有适当的权限(在命令行上已验证)。go-git进行git-upload-packRPC调用时失败,因为服务器响应为400:$ go run main.gounexpected client error: unexpected requesting "https://github.mycompany.net/my-org/myrepo.git/info/refs?service=git-upload-pack" status code: 400它发出的请求与此等效:GET /my-org/myrepo.git/info/refs?service=git-upload-pack HTTP/1.1Host: github.mycompany.netUser-Agent: git/1.0Accept: */*Authorization: Bearer atokenthatisdefinitelyvalid在请求标头中没有令牌的情况下,我Anonymous access denied从存储库中获得了预期的401()响应。有了令牌,它就会返回400。我发现非企业版GitHub上的公共存储库也是如此。区别在于它(没有预期)可以在没有Authorization标题的情况下工作,因为没有必要。如果我包含有效令牌,则GitHub与其企业版一样会以400响应。下面是一个最小的示例。有没有一种方法可以go-git与需要认证的GitHub Enterprise一起使用?理想情况下使用身份验证令牌?package mainimport (    "fmt"    "io/ioutil"    git "gopkg.in/src-d/go-git.v4"    "gopkg.in/src-d/go-git.v4/plumbing"    "gopkg.in/src-d/go-git.v4/plumbing/transport/http")const (    repoURL           = "https://github.mycompany.net/my-org/myrepo.git"    githubAccessToken = "atokenthatisdefinitelyvalid")func main() {    dir, _ := ioutil.TempDir("", "temp_dir")    options := &git.CloneOptions{        Auth:          &http.TokenAuth{Token: githubAccessToken},        URL:           repoURL,        Depth:         500,        ReferenceName: plumbing.ReferenceName("refs/heads/master"),        SingleBranch:  true,        Tags:          git.NoTags,    }    _, err := git.PlainClone(dir, false, options)    fmt.Println(err)}
查看完整描述

2 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

事实证明,Github使用令牌作为您用户的密码,因此它需要基本身份验证,而不是标头中的令牌:


options := &git.CloneOptions{

    Auth:          &http.BasicAuth{Username: "myusername", Token: "mytoken"},

    URL:           repoURL,

    Depth:         500,

    ReferenceName: plumbing.ReferenceName("refs/heads/master"),

    SingleBranch:  true,

    Tags:          git.NoTags,

}


查看完整回答
反对 回复 2021-04-19
  • 2 回答
  • 0 关注
  • 369 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信