要旨
GitHubアカウントを複数所持している人がそれらを管理する(使い分ける)際にやっておくと便利な設定をまとめました。
(Macユーザー向けの記事です)
GitHubでは個人が 無料 アカウントを複数所持することは禁止されています。
gh, direnv (, git)のインストール
brew install gh direnv # and git
状況想定
あなたは
Alice@github.comBob@github.comMike@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ではないため))
最後に
大分省略して書きました。
間違い・不明点ございましたらお知らせ下さい。