猿问

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

我试图用来go-git从GitHub Enterprise克隆存储库。为此,我将HTTPS协议与访问令牌一起使用,该访问令牌对我的存储库具有适当的权限(在命令行上已验证)。go-git进行git-upload-packRPC调用时失败,因为服务器响应为400:


$ go run main.go

unexpected 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.1

Host: github.mycompany.net

User-Agent: git/1.0

Accept: */*

Authorization: Bearer atokenthatisdefinitelyvalid

在请求标头中没有令牌的情况下,我Anonymous access denied从存储库中获得了预期的401()响应。有了令牌,它就会返回400。


我发现非企业版GitHub上的公共存储库也是如此。区别在于它(没有预期)可以在没有Authorization标题的情况下工作,因为没有必要。如果我包含有效令牌,则GitHub与其企业版一样会以400响应。


下面是一个最小的示例。有没有一种方法可以go-git与需要认证的GitHub Enterprise一起使用?理想情况下使用身份验证令牌?


package main


import (

    "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)

}


慕盖茨4494581
浏览 362回答 2
2回答

扬帆大鱼

事实证明,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,}
随时随地看视频慕课网APP

相关分类

Go
我要回答