要旨
GitHubアカウントを複数所持している人がそれらを管理する(使い分ける)際にやっておくと便利な設定をまとめました。
(Macユーザー向けの記事です)
GitHubでは個人が 無料 アカウントを複数所持することは禁止されています。
gh
, direnv
(, git
)のインストール
brew install gh direnv # and git
状況想定
あなたは
Alice@github.com
Bob@github.com
Mike@codeberg.org
という3つのアカウントを所有していて、
- デフォルトは Alice
- (カレントディレクトリが
~/dev/repos/github.com/alice
配下で Alice のgh
が有効) - カレントディレクトリが
~/dev/repos/github.com/bob
配下では Bob - カレントディレクトリが
~/dev/repos/codeberg.org/mike
配下では Mike
を使いたいという想定で話を進めます。
各種設定ファイル場所 root 一覧
$HOME
ディレクトリは散らかしたくないので、~/.config
に置けるものはなるべくそこに置きます。(direnv
の.envrc
の置き場はご自分の環境に依存します)
サービス名 | 設定ファイル場所 root | 内容 |
---|---|---|
ssh | ~/.ssh |
SSH の設定 |
gh | ~/.config/gh |
gh の設定 |
git | ~/.config/git |
git の設定 |
direnv |
~/dev/repos/<host>/<username> ~/dev/repos/github.com/bob ~/dev/repos/codeberg.org/mike
|
direnv の設定 |
ssh の設定
ssh-keygen
で鍵ペア作成(作成方法は他の記事に譲ります)
$ tree ~/.ssh/github
$HOME/.ssh/github
├── alice
│ ├── id_ed25519
│ └── id_ed25519.pub
└── bob
├── id_ed25519
└── id_ed25519.pub
3 directories, 4 files
~/.ssh/codeberg/mike
も同様に作成
# alice
Host github github.com
HostName github.com
User git
IdentityFile ~/.ssh/github/alice/id_ed25519
IdentitiesOnly yes
gh
の設定
$ tree ~/.config/gh
$HOME/.config/gh
├── alice.yml
├── bob.yml
├── config.yml
└── hosts.yml
1 directory, 4 files
プロトコルをssh
にします。
$ gh config set git_protocol ssh
GitHub で personal access token を取得後、下記ファイルの oauth_token
にコピペ:
github.com:
oauth_token: *******************************
user: alice
git_protocol: ssh
~/.config/gh/bob.yml
も同様
git
の設定
コミッターの名前とメアドを設定します。
[user]
name = Alice
email = 123456789+alice@users.noreply.github.com
[includeIf "gitdir:~/dev/repos/github.com/bob/"]
path = ~/.config/git/github/bob
[includeIf "gitdir:~/dev/repos/codeberg.org/mike/"]
path = ~/.config/git/codeberg/mike
[user]
name = Bob
email = 12345678+bob@users.noreply.github.com
~/.config/git/codeberg/mike
も同様に設定
direnv
の設定
direnv
のフックを.zshrc
に追加:
eval "$(direnv hook zsh)" # 追記後 source
~/dev/repos/github.com/bob
に .envrc
を作成し編集します:
export GIT_SSH_COMMAND="ssh -i ~/.ssh/github/bob/id_ed25519" # bob/id_ed25519.pub を GitHub に事前に置いておく
/bin/cp ~/.config/gh/bob.yml ~/.config/gh/hosts.yml && gh auth status # この行は GitHub 以外のプラットフォームでは必要ない
アラートに従い direnv allow
を実行
これ以降このディレクトリに移動した際に
.envrc
が自動的に読み込まれることになります
下記ディレクトリも似た流れで設定
-
~/dev/repos/github.com/alice
(alice/.envrc
ではbob/.envrc
の一行目が要らない(global に設定されているから)) -
~/dev/repos/codeberg.org/mike
(mike/.envrc
ではbob/.envrc
の二行目が要らない(GitHubではないため))
最後に
大分省略して書きました。
間違い・不明点ございましたらお知らせ下さい。