HTTPS接続でプライベートレポジトリのgit cloneが出来ない!! (Mac環境)

HTTPS接続でprivateなレポジトリをgit cloneしようとした時、レポジトリがnot foundエラーになってしまった。原因はなに?
この問題は主に複数のGitHubアカウントを利用していると発生する。

git clone https://github.com/foo/var
Cloning into 'var'...
remote: Repository not found.
fatal: repository 'https://github.com/foo/var.git/' not found

原因はなに?

検索すると、GitHubHTTPS接続できないときは、SSH接続を使いなさいという解決策を何度か見かけましたが、自分の環境でこの問題を解決してみました。
Mac環境です。


原因ケース1: gh利用時。想定しているアカウントがアクティブになっていない

ghを利用してGitHubアカウントを切り替えているが、接続したいアカウントがghのアクティブアカウントになっていないケース。
gh auth statusでアクティブアカウントを確認します。

gh auth status
github.com
  ✓ Logged in to github.com account taku-o (keyring)
  - Active account: false
  - Git operations protocol: https
  - Token: gho_************************************
  - Token scopes: 'gist', 'read:org', 'repo', 'workflow'

  ✓ Logged in to github.com account foo (keyring)
  - Active account: true # ←←←←←←← 想定外のアカウントがactive
  - Git operations protocol: https
  - Token: gho_************************************
  - Token scopes: 'gist', 'read:org', 'repo', 'workflow'

想定したアカウントがアクティブになっていない場合は、gh auth switchでアカウントをアクティブにしましょう。

gh auth switch

原因ケース2: キーチェーンアクセスにGitHubに接続するアカウント名が設定されている

まずユーザー名を指定して、git cloneできるか確認します。

git clone https://github.com/foo/var

# ↓ このようにユーザー名を指定

git clone https://taku-o@github.com/foo/var

もし、ユーザー名を指定したgit cloneが成功するなら、GitHubに接続する際、GitHubに渡されているアカウント名が間違っているということです。
次のコマンドで、GitHubに接続する際の認証に何が使われているか確認します。

git config --show-origin --get-all credential.helper
file:/Applications/Xcode.app/Contents/Developer/usr/share/git-core/gitconfig osxkeychain
file:/Users/taku-o/.gitconfig gh

osxkeychainが指定されているなら、キーチェーンアクセスにGitHub接続用の情報が作られているかもしれません。
キーチェーンアクセスアプリを起動して、github.comを検索します。

github.com
種類:インターネットパスワード
アカウント:foo
場所 https://github.com

もし、キーチェーンアクセスに登録がある場合、ghで指定したアクティブアカウントではなく、キーチェーンアクセスに設定されているアカウントで接続を試みるようなのです。
結果、プライベートなレポジトリにアクセスできないエラーが発生することになります。

  • キーチェーンアクセスから消して作り直す
  • キーチェーンアクセスから消して、ghベースでの管理に移行。

などで対応しましょう。


原因ケース3: .netrcに接続情報が登録されている

~/.netrcgithub.comへの接続情報が登録されているケース。そのため、git cloneした際に、.netrcに登録されているGitHubアカウントで接続されてしまっていた。

# ~/.netrc
machine github.com
  login foo
  password gxxxx

~/.netrcは同一ドメインで、複数アカウントを利用することは考慮されていません。
~/.netrcに定義されている、github.comへの接続情報は消してしまって、gh管理に移行するのが良いと思います。