質問: お世話になります。 以前Gitのアカウントを作成して、そのアカウントは自分のプライベートPCでしばらく使用していたのですが、最近、仕事で使用し始めました。 今回、仕事で使用しているGitアカウントと完全に分けるかたちで、別のGitアカウントを作成して、プライベート用の別のアカウント、別リポジトリを作成して使用したいのですが、自分のプライベートPCでpushをすると以前作成した(現在仕事で使用している)ユーザー名で認識されてしまい、「permissionがありません」というエラーが出てきてしまい、pushできません。 どなたか、同じPCでGitのアカウントを分ける方法をご存知でしたらご教示下さい。 よろしくお願い致します。
回答: SSHを使っているかHTTPSを使っているかで変わってきますが・・・ HTTPSを使う場合 HTTPSでこの問題が発生する場合、credential helper が資格情報(ユーザー名・パスワード)を記憶しているのだと思います。この場合、URLにユーザー名を記載することで、別の資格情報を記憶させることができます。 ``` git clone https://github.com/user_a/aprojectX ↓ git clone https://user_a@github.com/user_a/aprojectX ``` 参考 * githubへgit pushしようとすると403エラーとなる - スタック・オーバーフロー * How can I store keychain credentials for multiple Github accounts? - Stack Overflow SSHを使う場合 この場合ユーザーは秘密鍵で識別されるので、秘密鍵を使い分ける必要があります。 環境にもよりますが、コマンドで `git push/pull` している場合はSSH接続に openssh を使っていることでしょう。であれば `.ssh/config` で接続先ごとに秘密鍵を指定できます。 例えば `.ssh/config` に次のような記述を行い、 ``` Host github-private HostName github.com IdentityFile ~/.ssh/id_rsa_private ``` `github.com` の代わりに上で決めた `github-private` をホスト名として使うと、 ``` git clone git@github.com:user_a/projectX ↓ git clone git@github-private:user_a/projectX ``` `~/.ssh/id_rsa` の代わりに `~/.ssh/id_rsa_private` が使われます。 参考 Multiple GitHub Accounts & SSH Config - Stack Overflow なお、Githubに限って言えば、 * プライベート用のリポジトリで仕事用のアカウントをCollaboratorとして登録する * (SSHなら)仕事用の公開鍵をプライベート用のアカウントに登録する といった方法もあります。 ただし、いずれの方法であってもコミットの署名に使われる名前とメールアドレスを切り替えることはできません。リポジトリごとに `.git/config` で設定することはできますが、設定し忘れたことにpushしてから気づく、なんてのもままある話なので。。 OSのログインユーザーを分けるなどして、Gitを動かす環境ごと別にしたほうが安全です。