読者です 読者をやめる 読者になる 読者になる

Nobollel開発者ブログ

Nobollelのエンジニアが、UnityやCocos2d-xの旬な情報・技術を紹介します。

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を書き換えるということを覚えておくと良いと思います