GitHub のレポジトリをクローンする際, HTTPS で指定された URL を SSH 用の URL として扱う方法


常に HTTPS プロトコルの URL を SSH プロトコルに置き換えたい場合や, 自分を含めた特定のユーザのレポジトリの場合に限り, そのようにしたい場合に便利な Git の設定を紹介します.

HTTPS を SSH として扱う

GitHub でレポジトリを HTTPS プロトコルの URL を指定してクローンしようとした時, HTTPS の代わりに SSH を常に全てのレポジトリで使うようにする設定方法です.

次のコマンドを入力して設定します:

git config --global url."git@github.com:".insteadOf https://github.com/

ファイル ~/.gitconfig に次の新たな項目が設定されます:

[url "git@github.com:"]
  insteadOf = https://github.com/

そして HTTPS で GitHub のレポジトリをクローンすると:

git clone https://github.com/<user>/<repo>.git

次のように SSH を指定したかのようにでクローンできます:

git clone git@github.com:<user>/<repo>.git

ただこの設定の場合, GitHub の全てのユーザのレポジトリで HTTPS を SSH として扱うことになりますので, もし特定のユーザの場合に限ってそのようにしたい場合, 次のように <user>/ の部分を付け足してあげると可能です:

git config --global url."git@github.com:<user>/".insteadOf https://github.com/<user>/

例えば自分の GitHub のユーザ名は yu8mada ですので次のようになります:

git config --global url."git@github.com:yu8mada/".insteadOf https://github.com/yu8mada/

SSH を HTTPS として扱う

今度は反対に GitHub のレポジトリを SSH プロトコルでクローンしようとした際, SSH の代わりに HTTPS を常に全てのレポジトリで使うようにする設定です.

先ほどの設定と同じで url.<base>.insteadOf を指定して設定しますが, 今度は <base> の部分が HTTPS になり, 値の部分が SSH となります:

git config --global url."https://github.com/".insteadOf git@github.com:

ファイル ~/.gitconfig に次の新たな項目が設定されます:

[url "https://github.com/"]
  insteadOf = git@github.com:

そして SSH で GitHub のレポジトリをクローンしようとすると:

git clone git@github.com:<user>/<repo>.git

次のように HTTPS を指定したかのようにクローンされます:

git clone https://github.com/<user>/<repo>.git

特定のユーザのレポジトリに限り, そのようにしたい場合, 先ほどと同様 <user>/ を付け足してあげると可能です:

git config --global url."https://github.com/<user>/".insteadOf git@github.com:<user>/

特定の URL のショートカットを作る

url.<base>.insteadOf の値に指定できるものは HTTPS や SSH といったプロトコルを含んでいる必要はなく, 任意の文字列を指定できます.

なので, 値として指定された任意の文字列を <base> と紐づけることができ, URL のショートカットを作ることができます.

GitHub のレポジトリの HTTPS 用 URL は https://github.com/<user>/<repo>.git となりますが, 次のように設定すると:

git config --global url."https://github.com/".insteadOf github:

~/.gitconfig に次の項目が加えられ:

[url "https://github.com/"]
  insteadOf = github:

レポジトリをクローンする時, github: と最初に入力して, 後に <user>/<repo>.git を続けるだけで:

git clone github:<user>/<repo>.git

次のような URL を指定したかのようにクローンすることができます:

git clone https://github.com/<user>/<repo>.git

追加で gh: という名前のショートカットも加えて, 一つの URL に複数の名前を設定したい場合, --add オプションを加えてあげると可能です:

git config --global --add url."https://github.com/".insteadOf gh:

--add オプションを付けないと, github: から gh: に変更されるだけですので, 注意が必要です.

その ~/.gitconfig の内容は次のようになります:

[url "https://github.com/"]
  insteadOf = github:
  insteadOf = gh:

もちろん直接 ~/.gitconfig をご自身のエディタで編集することもできます.

HTTPS ではなく SSH を使いたい場合は次のようになります:

git config --global url."git@github.com:".insteadOf github:

特定のユーザのレポジトリのみ指定するような URL のショートカットを作る場合, <base> の部分にそのユーザ名のパスを書きたしてあげるだけでできますね:

git config --global url."git@github.com:<user>/".insteadOf <user>:

ちなみに自分の場合, 次のような設定をしています:

git config --global url."git@github.com:yu8mada/".insteadOf yu8mada:

文字数にして 23 文字と 8 文字の違いになりますので, 自分の場合 3 倍近く省略できるのでありがたいです.

まとめ

GitHub のレポジトリをクローンする時, HTTPS の URL を SSH として扱いたい場合や, その逆で SSH の URL を HTTPS として扱いたい場合, もしくは URL のショートカットを作るという場合に Git の設定項目 url.<base>.insteadOf はとても重宝しますので, ご興味のある方は是非設定されてみていただければと思います.

今回は GitHub の URL しか使いませんでしたが, Git のレポジトリを指す URL でしたらどんな URL でも指定できますので, GitLab, Bitbucket などの他のサービスを使われている方は, それらの URL を指定していただければと思います.

また git clone コマンドに限らず git remote add <name> <url><url> でもその設定は有効ですので, 自分の場合, よく次のようなコマンドを入力してリモートを登録しています:

git remote add origin yu8mada:<repo>.git

このように便利ですので, Git を使われている方は是非自分好みの設定をしていただければと思います.

ちなみに Heroku で常に SSH を介して Git 操作を行いたい場合, こちらの記事に書かれているように, 次のコマンドでそう設定できます:

git config --global url.ssh://git@heroku.com/.insteadOf https://git.heroku.com/