間違ったユーザーとしてGitがリモートGitHubリポジトリにプッシュする


82

私は仕事用のGitHubアカウントと個人用のアカウントを持っています。最初に個人用のものをテストプロジェクトに使用し、次に移動して同じコンピューター上の他のアカウントでリポジトリーを作成しました。

ここで、個人アカウントに新しいリポジトリを再度作成したかったので、グローバルとローカルを変更user.nameし、GitHubセットアップページに入力された新しいsshキーペアを実行しました。次に、ディレクトリを設定します

git init
git remote add origin <url>
git push origin

しかし、それは今私に教えてくれます

エラー:personaluser /newrepo.gitへのアクセスが拒否されました

他のアカウントがこのアカウントにどのように接続されているのかわかりません。関連するもの.git/configは表示されませんworkusername

Windows 10を使用している場合は、時間をかけてRajanの回答を読んでください。


1
Windows 10の場合、以下に回答してください。資格情報マネージャーから資格情報を削除します。2時間を無駄にしました。
xenteros 2017年

@xenteros回答として投稿してください。私は1時間失いました、そしてあなたは私をさらに1時間救いました。
lexicore 2018

回答:


76

これは私の現在の設定と非常によく似ています。すでにセパレートを設定しているssh-keysようですので、~/.ssh/configファイルを作成して、次のような情報を入力する必要があります。

Host work.github.com
    HostName github.com
    User WORK_GITHUB_USERNAME
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_work_rsa
    IdentitiesOnly yes

Host personal.github.com
    HostName github.com
    User PERSONAL_GITHUB_USERNAME 
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_personal_rsa
    IdentitiesOnly yes

すべてのプロパティはかなり自明に聞こえますが、IdentitiesOnly1つです。それが何のためにあるのかを説明しようとはしませんが、それは私の現在の設定にあり、正常に機能します。

また、これHost URLは正しいユーザー設定を取得するための単なるポインターであり、ファイルをターゲットHostNameURLに正しく取得することには影響しないことにも注意してください。

ここで、ユーザー名に応じて、origin(またはremote一般的な)URLがHostそれぞれのリポジトリの正しいURLと一致することを確認する必要があります。既存の個人リポジトリがある場合は.git/config、テキストエディタでそのリポジトリのファイルを編集できます。

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@personal.github.com:PERSONAL_GITHUB_USERNAME/project.git

またはコマンドラインから実行します。

git remote set-url origin git@personal.github.com:PERSONAL_GITHUB_USERNAME/project.git

あなたの仕事と同じように:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@work.github.com:your_work_organization/project.git

または、コマンドラインから:

git remote set-url origin git@work.github.com:your_work_organization/project.git

もちろん、ファイル内のHostURLの1つを~/.ssh/config

Host github.com

以前work.github.comは、構成の関係を簡単に確認するために使用していました。

これらがすべて設定されると、それぞれのリモコンにプッシュできるようになります。

編集

私が気付いたのは、値にグローバルgit config値を設定したuser.email場合(そしてuser.name、別の値も送信されると思います)、gitはそのメールユーザーとしてコミットを表示することです。これを回避するには、ローカルリポジトリ内のグローバルgitconfig設定をオーバーライドします。

$ git config user.name "John Doe"
$ git config user.email johndoe@example.com

これで、そのリポジトリの正しいユーザーとしてコミットが送信されます。


3
チャームのように機能します。ありがとうございました!
NorthBridge 2013年

1
このサイトでは、興味のある人のためにssh設定ファイルについて詳しく説明しています
Phil

3
確かに最も役立つ答え。本当にありがとう。
limp_chimp 2014

鮮やかさ!本当にありがとう!
fydo 2014年

1
私が見逃していた鍵は、.git / configでsshホストを指定することでした-どうもありがとうございました!
xdotcommer 2015年

45

[コントロールパネル]> [ユーザーアカウント]> [資格情報マネージャー]> [一般的な資格情報]に移動します

git資格情報を削除します。次に、gitpushを実行します。これにより、git資格情報の入力を求められます。正しい資格情報を入力してください。


3
これにより、Windows10でGitBashを実行しているときに問題が解決しました。ありがとう@ rajan-patil
suspicious_williams

英語のcontrol /name Microsoft.CredentialManager
WindowsGUIを

奇妙ですが、Git Bashを起動しているときだけうまく機能します(前述のとおり)が、同じ端末を使い続けるgit pushと、エラーで起動しました-端末を再起動した後でも、常に同じエラーがスローされ続けます。しかし、とにかく、ありがとう-それは最後に私の時間の多くを保存
Kostyantyn Didenko

これは間違いなく私が出くわした最良の答えです。残りは複雑でしたが、これは単純で正確でした。
claudekennilol 2017年

これは1回だけ機能します。アカウントを再度追加した後も、同じ問題が引き続き発生します。
Megakoresh 2017年

37

sshではなくhttpsに切り替えることもできます。httpsを使用する場合、.git / config設定が尊重されます。したがって、.git / configで次のように変更します。

url = git@github.com:USER/PROJECT.git

url = https://USER@github.com/USER/PROJECT.git

(これらの値はgitプロジェクトページにSSHありHTTPます。ボタンをクリックして新しい値を取得してください);


2
+1!これは、秘密鍵などをインストールしたくない場所を貸与機などからのワンプッシュオフを行うための本当に良い解決策である
lambshaanxy

1
使用する際の唯一の問題httpsは、push私が知らないgit configがある場合を除いて、実行するたびにユーザー/パスを入力する必要があることだと思います
hellatan 2012

これはとても古いことは知っていますが、ありがとうございます。私のマシンはssh用にセットアップされていませんが、それでも1回限りのプッシュではなく、仕事用のgithubアカウントにプッシュしようとしていました。これをプロジェクトディレクトリの.git / configで使用し、すばらしい動作をしました。わーい!あなたに賛成してください。
Sady 2014

2
あなたもできることに注意してくださいgit push https://username:pass@github.com/user/repo.git...あなたがpassあなたのシェルの歴史に問題がなければ
プラトン

これが最善の解決策です。ありがとうございました!
codemicky

33

githubは、gitからの設定ではなく、表示されるsshキーによってユーザーを識別します。

したがって、個人アカウントとしてプッシュしようとするときは、仕事用アカウントのsshキーがキーリングに含まれていないことを確認する必要があります。その逆も同様です。ssh-add -lキーリングにあるキーを判別し、キーリングssh-add -d keyfileからキーを削除するために使用します。

また、~/.ssh/config特定のsshキーをgithubに提示するように構成されているかどうかを確認する必要がある場合もあります。最後に、githubが同じssh公開鍵を持つ2つのアカウントをどのように処理するかわからないので、そうしないように注意してください。


3
必要に応じて、GIT_SSH環境変数を使用して、sshに別のコマンドを使用するようにgitに指示することもできます。特に、特定のキーを使用させることができます。参照してください。メインのgitのmanページ、またはおそらくこの質問を
カスカベル2011年

私のシステム(OSX 10.5)では、キーリングからキーを削除するコマンドはssh-add -d keyfile
Motin

@Motinに感謝します、それは実際に私が言うつもりだったものです。編集。
Walter Mundt 2012年

12

最近、新しいgithubアカウントを作成したため、同じ問題が発生しました。上記の答えを試しましたが、役に立ちませんでした。次に、Keychain Accessからgithubを削除することについての投稿をどこかで見ました(macを使用している場合のみ)。git pushすると、ユーザー名とパスワードを要求され、機能しました。


@CarpetsmokerOPがMac固有のソリューションを提供しているようです。
Zev Spitz

1
元の投稿を見つけて、リンクとして追加してみてください。
Zev Spitz


11

私も同じ問題を抱えていました。GitHubに同じSSHキーを使用する2つのアカウントがあり、GitHubはデフォルトで、目的のリポジトリへのアクセス許可がない間違ったアカウントを使用していることがわかりました。使用しなかったアカウントからSSHキーを削除しましたが、期待どおりに機能しました。

GitHubが自分自身を認証しているアカウントをテストできます。

ssh -T git@github.com

私にとって、これは元々間違ったユーザー名を示していましたが、そのアカウントから重複するSSHキーを削除した後、正しいユーザー名が表示され、リポジトリへのプルアンドプッシュはうまく機能しました。


8

これは少し遅れるかもしれませんが、私はかなり長い間これに固執し、最終的に次のように修正しました:

スクリーンショットの例

  • キーチェーンアクセス(osX)に入る

  • 検索git(すべてのアイテムを選択していることを確認してください)

  • ここに、犯人の資格情報があります。それらを削除します。

お役に立てれば!


これが私を助けた唯一の答えでした!
ワイルダーペレイラ

この回答は、Macの問題を修正するのに役立ちました。
javascript HuppTechnologies19年

6

これはこれを行う方法です。異なるsshアカウントに対して異なるssh構成を使用できます。

2月22日に更新:

このリンクをチェックしてください:https//gist.github.com/2351996


リンクされたGistとGistページの最初のコメントは私にとって完璧に機能しました。キーリングに複数のキーを残すことができ、すべてが「正常に機能する」ため、これはWalterMundtの回答よりも優れていると思います。
keybits 2013

3

アカウントに関連付けられているSSHキーを変更しても機能しない場合は、アカウントに関連付けられているメールアドレスを変更してください。

Github>アカウント設定>メールに移動し、コミットに使用しているメールアドレスがアカウントのメールと一致することを確認します。

コミットに使用している電子メールアドレスを確認するには、次のコマンドを実行しますgit config --global user.email。コミットに使用しているメールアドレスを変更する必要がある場合は、を実行しgit config --global user.email "your_email@youremail.com"ます。


2

同じ問題が発生しました。以下は私の場合に起こることです:

以前、これによってリモートリポジトリと通信するたびに資格情報を要求しないようにgitを作成しました:git config --global credential.helper wincred

「wincred」を「none」に置き換えて同じコマンドを実行することで問題を解決しましたgitconfig --global credential.helper none

次に、gitがユーザー名/パスをもう一度尋ねると、すべてうまくいきます


1

私にもこの問題がありましたが、他の解決策はどれもうまくいきませんでした。作業の.netrcために、github認証のエントリを含むファイルを作成したことがわかりました。gitコマンドは常に使用.netrc私の古いユーザー名とパスワードを持っていたが、。.netrc新しいユーザー名とパスワードを使用するには、ファイルのエントリを編集する必要がありました。


1

最初に実行killall ssh-agentしてから、使用する必要のあるアカウント用に生成されたsshキーを追加する一時的な解決策を見つけました ssh-add ~/.ssh/id_4shameer

これは、タイプのエラーが発生したときに複数のgithubアカウントで作業できる1つの方法ERROR: Permission to user/repo-git.git denied to usernameです。


1

彼らが最近MacbookをActiveDirectoryに接続し、いくつかの管理者アカウントを私のマシンに追加するまで、gitに問題はありませんでした。ただし、その後、画面をロックして戻ってくるまで、gitは正常に機能します。次に、次のような漠然としたエラーが発生します

No user exists for uid 1927040837
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

この特定のマシンには、ユーザー用のsshキーが1つしかなく、用語でzshを使用しています。ユーザーのメールアドレスと名前が正しかったので、それは問題ではありませんでした。エルゴ、マシンをロックするたびに再起動しても無駄です。私にとっての解決策は、.zshrcファイルを編集して、ssh-keyをエクスポートする行のコメントを解除することでした(これまでに行う必要はなく、zshを何年も使用しています)。

行は次のようになります。

# ssh
export SSH_KEY_PATH="~/.ssh/<your_rsa_id>"

これを実行したらreset、ターミナルでを実行するだけで、すべてが正常に機能します。

これが他の誰かに役立つことを願っています。


0

追加したい-別のユーザーのアカウントで作業している場合は、リポジトリ設定の下の共同編集者エリアに自分を追加してください。


0

私もこの問題に遭遇し、sshキーを削除して新しいキーを作成した後でも、上記の解決策はどれも機能しませんでした。ssh-agentがキャッシュされたキーを使用していたことが判明したため、実行する必要がkillall ssh-agentあり、それが機能しました。

ここで解決策を見つけました。http://fzysqr.com/2012/08/28/quick-tip-wrong-ssh-key-cached-with-github-after-changing-users-and-keys/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.