yosemite's blog

About technology, books, diary

プライベートリポジトリを $ go get しようとしたらハマった

gopher
gopher

契機

Go でライブラリを自前で作成したりした際に、プライベートなリポジトリからだと $ go get できないという問題に遭遇しました。

会社のリポジトリとかだと、 Organization に乗っかっているはずなのでプライベートのものが多いですよね。

実際はこんなふうに怒られました。

$ go get github.com/<org-name>/<repo-name>

go: finding github.com/<org-name>/<repo-name> v0.0.0-2019090000000-12345678
go: github.com/<org-name>/<repo-name>@v0.0.0-2019090000000-12345678: git fetch -f https://github.com/<org-name>/<repo-name> refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /Users/<user-name>/.gvm/pkgsets/go1.12.6/global/pkg/mod/cache/vcs/12345678abcdefgh12345678abcdefgh: exit status 128:
    remote: Invalid username or password.
    fatal: Authentication failed for 'https://8eae27fe840f92ba131c788bddc3f2b3810ccfb7:oauth-basic@github.com/<org-name>/<repo-name>'
go: error loading module requirements

解決方法と手順

かのリポジトリの issue に上がっているのを見つけました。

github.com

If Go code is in a private Github repo, we wouldn't be able to run go get github.com/account/repo to retrieve the code.

訳:プライベートリポジトリにある Go のソースコードは、 $ go get できないよ。
(原因、理由については言及なし😭)

上記の記事にもある通り、どうやらプライベートリポジトリから $ go get する時は、2 つの手順で解決できるっぽい。

  • Personal access tokens を生成
  • $ go get で呼び出される Git には、通常のものではなく、取得したトークン付きの URL でアクセスするように設定

Personal access tokens を生成

GitHub の Developer settings 画面に行けば「Personal aceess tokens」を発見できるかと思います。
「Generate new token」を押して赤い枠の部分を入力、チェックを入れていきます。( 3 つ目に関しては、Organization のリポジトリの場合のみ必要です。

  • Note : 何用のトークンか忘れないように名前をつけておきましょう。
  • repo : チェックを入れます。
  • admin:org : Organization の場合はチェックを入れます。

github

発行されたトークンは、コピーしてちゃんと残しておきます。

.gitconfig に設定

先ほど取得したトークンを設定していきます。

$ git config --global url."https://<  your token  >:x-oauth-basic@github.com/".insteadOf "https://github.com/"

$ git config --list | grep "url.https"
url.https://<  your token  >:x-oauth-basic@github.com/.insteadof=https://github.com/

というふうに返ってくると、ちゃんと設定できているかと思います。

再度 $ go get !!

$ go get your account(or your Org)/your repo
# cd /Users/your name/.gvm/pkgsets/go.ver/global/your account(or your Org)/your repo; git show-ref
package github.com/your account(or your Org)/your repo

無事に $ go get できました🎉

おわりに

これからも開発中にハマったこともできるだけ残していきたいなと思います。
最後まで見てくださりありがとうございました。

それじゃまた🙋‍♂️