自分はGitHubのアカウントを会社用とプライベート用で分けています。
というのも、会社用ではお客様に自分のアカウント情報を送ってプロジェクトに招待していただく機会があり、仕事用と趣味で作成したプロジェクトが同じアカウントに混在してしまうのはよろしくない…と感じたからです。
さて、先日とあるきっかけでそれぞれのGitHubアカウント上で作成したプロジェクトを同じPC上で触る場面がありました。
そして片方のプロジェクトのソースを編集し、コミットしようとしたところ、エラーが発生。
remote: Repository not found.
repository 'https://github.com/プロジェクトのオーナー名/プロジェクト名.git/' not found
GitHubからコピペしたURLを指定しているので、存在しないはずはないのですが、何度やってもnot foundになってしまいます。
ネットで調べたところ、次の情報を発見。
remote: Repository not found.となった時の対応方法 – Qiita
どうやらGItHubでは、認証情報が誤っている場合はNotFoundを返してくるようです。
てっきりForbiddenでも帰ってくるのかと思っていたのですが…灯台下暗し。
念のため、リモートに設定されているURLを再確認したところ、あることに気づきました。
先程あげた2つのプロジェクトですが、いずれもドメインはgithub.comとなっていました。
どちらもドメインは一緒だが、必要な認証情報が異なる。
しかもGitの場合は一度認証情報を入力するとドメインと1:1で紐づけて認証情報を保存するので、最初にログインしたGitHubのアカウント情報が残ってしまい、別のGitHubの認証情報が必要なリポジトリに対してプッシュしようとしてもはじかれるのも納得がいきます。
ということで、プロジェクトごとにうまく認証情報を切り替える必要が出てきたのですが、先程書いたようにドメインと認証情報が1:1で紐づけられてしまうので、このままでは毎回認証情報を削除しないといけなくなります。
うまく複数アカウントを共存できないかといろいろと調べたところ、リモートリポジトリのアドレスを下記のようにすればよいことがわかりました。
https://github.com/プロジェクトのオーナー名/プロジェクト名.git
↓
https://GitHubユーザー名:GitHubパスワード@github.com/プロジェクトのオーナー名/プロジェクト名.git
または
https://GitHubユーザー名@github.com/プロジェクトのオーナー名/プロジェクト名.git
これでGitやOSからは別のドメインとして認識されるので、認証情報をそれぞれのプロジェクトで切り替えて使うことができます。
また、URLに認証情報を含めれば認証自体がいらなくなるようです。
ということで、自分の環境では無事解決することができました。
同じ状況でお困りの方は試してみてください。