go-git
GitHub Enterprise からリポジトリをクローンするために使用しようとしています。そのために、レポに対する適切なアクセス許可を持つアクセス トークンを使用して HTTPS プロトコルを使用しています (コマンド ラインで確認済み)。サーバーが 400 で応答するためgo-git
、RPC 呼び出しを行うときに失敗します。git-upload-pack
$ 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 で応答します。
Enterprise 以外の 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)
}