Carpe Diem

備忘録

Private Repository で go get

問題

作業リポジトリで依存パッケージを全部アップデートしようと以下のコマンドを実行したところ

$ go get -u ./...

以下のようなエラーが出ました。

package github.com/hoge/fuga/package: /home/vagrant/go/src/github.com/hoge/fuga is from git@github.com:hoge/fuga.git, should be from https://github.com/hoge/fuga

怒られたのは依存パッケージでなく、開発中の作業リポジトリでした。
こちらは自分のプライベートリポジトリで、開発自体は

$ git clone git@github.com:hoge/fuga.git

で登録したのでSSHで問題なく使えたのですが、go getHTTPSで登録する必要があるみたいです。

解決法

プライベートリポジトリをHTTPSで登録すると、ID&PWを訊かれるようになります。
毎回ID&PWを入力するのは手間なので、以下のように対応します。

アクセストークンの取得

以下のサイトを参考にアクセストークンを発行します。
Creating an access token for command-line use

  1. 右上の歯車マークをクリックして設定を開く
  2. 左メニューのPersonal access tokensを開く
  3. Generate new tokenをクリック
  4. 必要そうなscopeにチェックを入れてGenerate token

    f:id:quoll00:20150109125302p:plain

  5. 表示されるaccess tokenをコピー。1回きりしか表示されないので注意です。

    f:id:quoll00:20150109125311p:plain

自動ログイン設定

先ほど取得したアクセストークンを~/.netrcに登録します。

$ vim ~/.netrc
machine github.com
  login <token>

gitのremote urlを変更

現状のリポジトリの状態を確認します。

$ git remote -v
origin     git@github.com:hoge/fuga.git (fetch)
origin     git@github.com:hoge/fuga.git (push)

以下を実行して修正します。

$ git remote set-url origin https://github.com/hoge/fuga.git
$ git remote set-url --push origin https://github.com/hoge/fuga.git

またgo getするときは現在のローカルブランチをmasterにしておいてください。

これでgo getしても怒られなくなりました。

その他注意

ID&PWをnetrcに登録してもできるのですが、二段階認証を設定していると必ずコケます。
どうやらgo getは二段階認証に対応してないみたいです。

参考