Help us understand the problem. What is going on with this article?

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

契機

Go でライブラリを自前で作成したりした際に、プライベートなリポジトリからだと $ go get できないという問題に遭遇しました。
会社のリポジトリとかだと、 Organization に乗っかっているはずなのでプライベートのものが多いですよね。

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

terminal
$ 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 に上がっているのを見つけました。

go get from private Github repo · Issue #29 · k8sp/sextant

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.png

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

.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 できました🎉

最後に

これからも開発中にハマったこともできるだけ残していきたいなと思います。

本記事は ブログ からの転載です。
使い方としてはブログをメインにしているので、 Qiita に書いていない記事もいくつかあります。そちらも是非ご覧いただけると幸いです! yosemite's blog

Twitterの方でも「エンジニア、IT系」を中心に色々と情報を発信しておりますので、もし宜しければフォローしてみてください。@inexp_eng

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away