たとえば個人用と会社用で2つの GitHub アカウントを使い分けている場合、git clone/push
するときに、認証に利用するアカウントを使い分ける必要があります。
Git の認証情報には会社用アカウントのアクセストークンを登録しているが、そのままでは個人用アカウントのリポジトリにアクセスできない、という状況になります。
そういうときには、Git の useHttpPath
設定を true
に設定すると便利です。
useHttpPath
By default, Git does not consider the “path” component of an http URL to be worth matching via external helpers. This means that a credential stored for
https://example.com/foo.git
will also be used forhttps://example.com/bar.git
. If you do want to distinguish these cases, set this option to true.https://git-scm.com/docs/gitcredentials#Documentation/gitcredentials.txt-useHttpPath
デフォルトの挙動だと、Git は URL のパス部分を考慮せずに認証情報を保存し、マッチングします。つまり、https://example.com/foo.git
をクローンする際に用いた認証情報は、https://example.com
に対する認証情報として紐づけられます。そのため https://example.com/bar.git
をクローンする際にも同じ認証情報が使われる動きとなります。
useHttpPath
設定を true にした場合は、URL のパス部分も考慮されるようになります。つまり、https://example.com/foo.git
と https://example.com/bar.git
では異なる認証情報を保存し、マッチングするようになります。
この設定を使えば、以下のように同じ github.com
ドメインであっても異なる認証情報を使い分けることができます。
https://github.com/your-private/your-repo.git
https://github.com/your-company/company-repo.git
設定するためのコマンドは次のとおりです。
git config --global credential.useHttpPath true
設定されたことは以下で確認できます。
git config --global --list
# または
cat ~/.gitconfig
もし設定を削除したい場合は、以下のコマンドを実行します。
git config --global --unset credential.useHttpPath
なお、この設定を有効にしたことにより、異なるリポジトリを新規にクローンする際は毎回、認証情報の入力が求められますが、アクセストークンはアカウントごとに1つを使いまわすことがほとんどだと思います。GitHub ではアクセストークンは発行したときにしか表示されないため、新規リポジトリをクローンする際は、Keychain Access
(Mac であれば)に保存されている内容からコピペして入力すると良いでしょう。
補足 #
今回取り上げた以外の方法もあります。その1つが URL に擬似ユーザ名を含める方法です。毎回アクセストークンを入力するのが面倒な場合はこちらの方法を取ってみても良いかもしれません。(ただし、個人的には useHttpPath
の方法で十分かなと感じています)