submoduleのあるGitリポジトリで複数のssh公開鍵を使う方法
どうもはじめまして、先月からNobollelでお世話になっているエンジニアの水津です
今回は初めてなので軽い内容で、submoduleのあるGitリポジトリで複数のssh公開鍵を使う方法についてです
割と特殊な条件の時に必要となるので普段は必要ない設定かと思いますが、例えばgithubのユーザーをプライベート用と会社用で持っていて、それらを同じPCで使おうと思った時に、同じ公開鍵を登録しようとするとKey is already in useと言われて登録できません
その場合、別の鍵を作成して、~/.ssh/configを設定するのですが、そちらの手順については以下の記事が綺麗にまとまっています
【メモ】githubの複数アカウントにSSH接続するための設定手順 | Developers.IO
しかし、この方法で問題になるのは、チェックアウトしたGitリポジトリにsubmoduleがある場合です
チェックアウトしたGitリポジトリのsubmoduleを、新しく作った公開鍵で使えるように.gitmodules
のurlを~/.ssh/config
で設定した自分のホスト名に書き換えてプッシュしたりなんかすると、今度は他の全てのユーザーがsubmoduleが使えなくなってしまいます
この場合の対応方法については以下のStackOverflowに適切な回答がありました
github - Updating a submodule when multiple git accounts are configured - Stack Overflow
ここの回答にあるように.git/config
の中にあるurlのホスト名部分を、~/.ssh/config
で設定したホスト名に変更すれば、ローカルのurlのみを変更することができます
しかし、この状態でgit submodule sync
を実行したりすると再びローカル設定が.gitmodules
のurlに上書きされてしまうため、注意が必要です
SourceTreeで作業をしていたりするといつの間にか.git/config
が書き換わっていたということもあるので、ローカル設定を変更するには.git/config
を書き換えるということを覚えておくと良いと思います