リポジトリごとに違うアカウントを使いたいのですが git push
ができなくて困っていました。
探した記事がどれも難しかったので自分用にまとめます、、、
※SSH接続でアカウントを使えている (= SSHキーを作成して GitHub への登録ができている) 人を対象にします。
SSH接続に使う鍵を用意する
複数アカウントを使うのでアカウントの数だけSSH鍵を作ります。
$ ssh-keygen -t ed25519 -C "メールアドレス"
$ ls ~/.ssh
id_ed25519_1 id_ed25519_1.pub # アカウント1 の 秘密鍵と公開鍵
id_ed25519_2 id_ed25519_2.pub # アカウント2 の 秘密鍵と公開鍵
id_ed25519_3 id_ed25519_3.pub # アカウント3 の 秘密鍵と公開鍵
SSH鍵を GitHub に登録する
GitHub のページで以下を開きます。※2023/03/18 の表記です
アカウントの Setting > SSH and GPG keys > SSH keys > New SSH Key
ひとつのアカウントにつき公開鍵をひとつ設定します。一度どこかのアカウントで使った公開鍵は他のアカウントで使えないので注意してください。
.ssh フォルダに config ファイルをつくる
$ touch ~/.ssh/config
config ファイルの内容は以下です。
「ホスト1」と「id_ed25519_1」は自分用に変えてください。他の値はこのままです。
Host ホスト1
hostname github.com
identityfile ~/.ssh/id_ed25519_1
user git
IdentitiesOnly yes # なくても動くけどあったほうがいい
Compression yes # なくても動くけどあったほうがいい
Host ホスト2
hostname github.com
identityfile ~/.ssh/id_ed25519_2
user git
IdentitiesOnly yes
Compression yes
Host ホスト3
hostname github.com
identityfile ~/.ssh/id_ed25519_3
user git
IdentitiesOnly yes
Compression yes
ちゃんと認証されるか確認します。うまく設定できていれば、GitHub に Hi {アカウント名}!
って言われます。
$ ssh ホスト1
PTY allocation request failed on channel 0
Hi アカウント1! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
gitconfig に接続先の設定をいれる
やっとですね。これをやると git push
ができるようになります。
まずアカウントを使い分けたいリポジトリのルートに移動します。
ここで言うルートというのは、初めてリポジトリを作ったときに README.md が作られるところです。
ls -a
をすると .git
という隠しファイルが見つかります。
$ ls -a
. .. .git
.git
以下にある .git/config
を編集します。
$ code .git/config # vscode で編集する場合
[remote "origin"]
というセクションがあるので書き換えます。セクションがなければ新しく作ります。
[remote "origin"]
- url = git@github.com:アカウント1/リポジトリ名.git
+ url = ホスト1:アカウント1/リポジトリ名.git
fetch = +refs/heads/*:refs/remotes/origin/*
保存して、動くか試します。
$ git branch test-multiple-account
$ git push origin test-multiple-account
$ git push origin :test-multiple-account # リモートのブランチを削除
$ git branch -D test-multiple-account # ローカルのブランチを削除
エラーが出なければ成功です。
参考になった記事です