LoginSignup
3
5

More than 5 years have passed since last update.

hub でディレクトリごとに GitHub アカウントを使い分ける方法

Last updated at Posted at 2014-12-30

TL;DR

  • hub 2.x 以降, 設定ファイルは環境変数 GH_CONFIG を参照している
  • これをディレクトリごとに切り替えるために direnv を入れる
  • 切り替えたいディレクトリで echo export GH_CONFIG=$(pwd)/.hub > .envrc しておきあとは hub を普通に使うだけ

hub でディレクトリごとに GitHub アカウントを使い分ける

仕事と自宅で別の GitHub アカウントを使う場合など, hub が store しておく token を複数持ちたい場合がありますよね.
そんなときに, 以下の方法を取るとディレクトリごとに任意の GitHub token を選択することができ, 公開リポジトリにうっかり会社のアカウントで hub pull-request して失敗することがなくなります.

方法

以下は golang で書かれた hub 2.x の話になるので, まず hub 2.x を入れます.

brew install --HEAD hub

hub は取得した token を ~/.config/hub に保存します. そこの処理を見てみましょう.

hub/config.go

func configsFile() string {
    configsFile := os.Getenv("GH_CONFIG")
    if configsFile == "" {
        configsFile = defaultConfigsFile
    }

    return configsFile
}

defaultConfigFile は defaultConfigsFile = filepath.Join(os.Getenv("HOME"), ".config", "hub") と定義されています. これが ~/.config/hub なのですが, 環境変数 GH_CONFIG がそれに先んじて参照されているため, GH_CONFIG に適当なファイルパスを指定しておけば良さそうです.

こういうときに便利なのが direnv です.

zimbatm/direnv

導入方法と紹介は以下の記事に詳しくあります.

direnvを使おう - Qiita

これは, ディレクトリごとに任意の環境変数を設定できる優れものです.
今回の場合だと GitHub アカウントを変えたいディレクトリで,

echo export GH_CONFIG=$(pwd)/.hub > .envrc

とすると, ディレクトリ直下に .envrc ができ環境変数 GH_CONFIG が読み込まれます. あとは hub pull-request すると user_name, password を聞かれるので, 設定したいアカウント情報を入力するとそのアカウントで Pull Request が作成されます:congratulations:

今回の設定だと .hub に GitHub token が保存されます. 間違って commit に含まれないように .hub を共通の .gitignore に追加しておきましょう. また, このやり方だと毎回 token を生成してしまうので, ~/.config/hub_second などのようにアカウントごとに特定の名前を付けるようにして,

echo export GH_CONFIG=$HOME/.config/hub_second > .envrc

というふうに生成するのも良いでしょう.

3
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5