我试图用来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,
}
- 2 回答
- 0 关注
- 369 浏览
添加回答
举报
0/150
提交
取消