複数の GitHub アカウントを使い分けるときは Git の useHttpPath を true にすると便利

複数の GitHub アカウントを使い分けるときは Git の useHttpPath を true にすると便利

たとえば個人用と会社用で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 for https://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.githttps://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 の方法で十分かなと感じています)

https://stackoverflow.com/questions/52222046/how-do-i-store-credentials-per-repository-in-git-credential-manager-for-windows