tl;dr
~/.ssh/config
にホスト名のエイリアスを書いて
Host github-project1 HostName github.com IdentityFile ~/.ssh/project1/id_rsa-project1
~/.gitconfig
にURLの読み替え設定をすれば
[url "ssh://git@github-project1/"] insteadOf = git@github.com:project1/
SSH用のURLで普通に git clone できるはず
$ git clone git@github.com:project1/some-cool-repo.git Cloning into 'some-cool-repo' ... remote: Enumerating objects: xxx, done. remote: Counting objects: 100% (xxx/xxx), done. remote: Compressing objects: 100% (xxx/xxx), done. remote: Total xxx (delta xxx), reused xxx (delta xxx), pack-reused xxx Receiving objects: 100% (xxx/xxx), xx MiB | xx MiB/s, done. Resolving deltas: 100% (xxx/xxx), done.
背景とか
プロジェクト毎にユーザや環境が違ってSSHキーも入れ替えるのが面倒だったので。
もともと https のURLを SSHのURLに書き換える(逆も)ために使えるのは知っていたがリポジトリのオーナー指定までできるか試したらうまくいった。
[url "ssh://.../"]
の方は最後の /
も必要。
ついでに、設定ファイルも分離してincludeさせるとなんかいい感じ。
- SSHの設定分離
~/.ssh/config
# Host の設定などより前に書く必要ある。変なエラーが出たり設定が反映されずよくわからないはまり方をする Include "project1/config" # other configs Host xxx Hostname xxxx ...
~/.ssh/project1/config
Host github-project1 HostName github.com IdentityFile ~/.ssh/project1/id_rsa-project1
これでSSHのカギと設定をフォルダにまとめられる
- Gitの設定分離
Gitの設定もフォルダに分けるとよいかもしれないけれど、そこまで利点がないかも。 dotfilesをGit管理していて、プロジェクト固有の情報を入れたくないときくらいかな。
~/.gitconfig
... [include] path = .gitconfig_project1
~/.gitconfig_project1
[url "ssh://git@github-project1/"] insteadOf = git@github.com:project1/