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/
関連記事
Git でより良いコミットメッセージを書く方法2018.06.13
Git の Remote コマンドの使い方2018.06.06
Ruby の正規表現を備忘録としてまとめてみた2018.08.30
git rebase でヒストリを直線的にする方法と使う時の注意点2018.08.13
Homebrew で macOS に Neovim をインストールして, 使えるように設定する方法2018.08.03