Git empujando al repositorio remoto de GitHub como usuario incorrecto

82

Tengo una cuenta de GitHub de trabajo y una personal. Primero usé el personal para proyectos de prueba, luego seguí adelante e hice un repositorio con la otra cuenta en la misma computadora.

Ahora quería crear un nuevo repositorio en mi cuenta personal nuevamente, cambié el global y el local user.name, e hice un nuevo par de claves ssh, ingresado en la página de configuración de GitHub. Luego configuro el directorio

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

pero eso ahora me dice

ERROR: Permiso a personaluser / newrepo.git denegado

No tengo idea de cómo está conectada la otra cuenta a esta. .git/configno muestra workusernamecosas relacionadas.

Si está utilizando Windows 10, tómese su tiempo para leer la respuesta de Rajan.

Raz Faz
fuente
1
Para Windows 10, responda a continuación. Quite las credenciales del administrador de credenciales. Perdido 2 horas de tiempo.
xenteros
@xenteros Por favor publique esto como respuesta. Perdí 1h y tú me salvaste otra 1h.
lexicore

Respuestas:

76

esto suena muy similar a mi configuración de trabajo actual. parece que ya ha configurado sussh-keys por lo que también necesita crear un ~/.ssh/configarchivo y completarlo con información similar a esta:

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

Cada propiedad suena bastante autoexplicativa, pero la IdentitiesOnlyúnica. No intentaré explicar para qué sirve, pero está en mi configuración actual y funciona bien.

También vale la pena señalar que Host URLes solo un puntero para obtener la configuración de usuario correcta y no tiene ningún efecto en la obtención de los archivos correctamente en su HostNameURL de destino .

Ahora solo necesita asegurarse de que su URL origin(o cualquiera remoteen general) coincida con la HostURL correcta en sus respectivos repositorios según su nombre de usuario. Si ya tiene repositorios personales existentes, puede editar los repositorios.git/config archivo de en su editor de texto:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = [email protected]:PERSONAL_GITHUB_USERNAME/project.git

o hacerlo a través de la línea de comando:

git remote set-url origin [email protected]:PERSONAL_GITHUB_USERNAME/project.git

Lo mismo ocurre con tu trabajo uno:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = [email protected]:your_work_organization/project.git

o de nuevo, a través de la línea de comando:

git remote set-url origin [email protected]:your_work_organization/project.git

Por supuesto, siempre puede configurar una de sus HostURL en su ~/.ssh/configarchivo como

Host github.com

Solo solía work.github.comver las relaciones de configuración más fáciles.

Una vez que estén todos configurados, debería poder presionar a cada control remoto respectivo.

EDITAR

Una cosa a tener en cuenta que acabo de descubrir es que si alguna vez establece valores de configuración global de git para su user.emailvalor (y supongo user.nameque también enviaría un valor diferente), git mostrará sus confirmaciones como ese usuario de correo electrónico. Para evitar esto, puede anular la configuración de configuración global de git dentro de su repositorio local:

$ git config user.name "John Doe"
$ git config user.email [email protected]

Esto debería enviar confirmaciones como el usuario correcto para ese repositorio.

hellatan
fuente
3
Funciona de maravilla. ¡Gracias!
NorthBridge
1
Este sitio explica el archivo de configuración ssh con más detalle para cualquiera que esté interesado.
Phil
3
Seguro que es la respuesta más útil. Gracias un montón.
limp_chimp
¡Brillante! ¡Muchas gracias!
Fydo
1
La clave que me faltaba era especificar el host ssh en .git / config. ¡Muchas gracias!
xdotcommer
45

Vaya a Panel de control> Cuentas de usuario> Administrador de credenciales> Credenciales genéricas

eliminar las credenciales de git. Luego ejecuta git push. Esto le pedirá las credenciales de git. Ingrese sus credenciales correctas.

Rajan Patil
fuente
3
Esto resolvió mi problema mientras ejecutaba Git Bash en Windows10. Gracias @ rajan-patil
suspicious_williams
Para aquellos que no tienen la GUI de Windows en inglés, pueden comunicarse con el administrador de credenciales escribiendo control /name Microsoft.CredentialManageren la línea de comando
bgusach
extraño, pero funciona muy bien solo cuando estoy iniciando Git Bash (como se mencionó anteriormente) pero si continúo usando el mismo terminal que comencé git pushcon un error , sigue arrojando los mismos errores todo el tiempo, incluso después del reinicio del terminal. Pero gracias, de todos modos , me ahorró mucho tiempo al final
Kostyantyn Didenko
Esta es definitivamente la mejor respuesta que he encontrado. El resto fue complicado, pero esto fue simple y preciso.
claudekennilol
Esto funciona UNA VEZ. Después de agregar las cuentas de nuevo, se sigue produciendo el mismo problema.
Megakoresh
37

También puede simplemente cambiar a https, en lugar de ssh. Si usa https, respetará la configuración .git / config. Entonces, en .git / config, cambie:

url = [email protected]:USER/PROJECT.git

a

url = https://[email protected]/USER/PROJECT.git

(estos valores están en la página del proyecto git, haga clic en los botones SSHy HTTPpara obtener los nuevos valores);

yuttadhammo
fuente
2
+1! Esta es una solución realmente buena para hacer empujes únicos desde máquinas de préstamo, etc., donde no desea instalar claves privadas, etc.
lambshaanxy
1
Creo que el único problema con el uso httpses que tienes que escribir el usuario / contraseña cada vez que haces una push, a menos que haya alguna configuración de git que no conozca
hellatan
Sé que esto es muy viejo, pero GRACIAS. Mi máquina no está configurada para ssh, pero todavía estaba intentando ingresar a mi cuenta de trabajo en github en lugar de a mi cuenta personal para una sola vez. Usé esto en mi .git / config en el directorio de mi proyecto y funcionó increíble. ¡Hurra! Vota por ti.
Sady
2
tenga en cuenta que usted también puede hacerlo git push https://username:[email protected]/user/repo.git... si está de acuerdo con passsu historial de shell
Platón
Esta es la mejor solución. ¡Gracias!
codemicky
33

github te identifica por la clave ssh que ve, no por ninguna configuración de git.

Por lo tanto, debe asegurarse de que la clave ssh de su cuenta de trabajo no esté en su llavero cuando intente presionar como su cuenta personal y viceversa. Úselo ssh-add -lpara determinar qué llaves están en su llavero y ssh-add -d keyfilepara quitar una llave de su llavero.

Además, es posible que deba verificar ~/.ssh/configsi lo ha configurado para presentar ciertas claves ssh a github. Finalmente, no sé cómo trata github con dos cuentas que tienen la misma clave pública ssh, así que asegúrese de no hacer eso.

Walter Mundt
fuente
3
También puede, si es necesario, usar la GIT_SSHvariable de entorno para decirle a git que use un comando diferente para ssh; en particular, puede hacer que use una clave específica. Consulte la página principal de manual de git , o tal vez esta pregunta .
Cascabel
En mi sistema (OSX 10.5), el comando para eliminar la clave del llavero fuessh-add -d keyfile
Motin
Gracias @Motin, eso es lo que quise decir. Editado.
Walter Mundt
12

Tuve el mismo problema recientemente porque creé una nueva cuenta de github. Probé las respuestas anteriores pero no sirvió de nada. Luego vi una publicación en algún lugar sobre cómo eliminar github de Keychain Access (solo si está usando mac ). Cuando git push, solicita el nombre de usuario y la contraseña, ¡y funcionó!

flipjs.io
fuente
@Carpetsmoker Parece que el OP está ofreciendo una solución específica para Mac.
Zev Spitz
1
Intente encontrar la publicación original y agréguela como enlace.
Zev Spitz
11

Yo tuve el mismo problema. Resulta que tenía dos cuentas en GitHub usando la misma clave SSH y GitHub usó de forma predeterminada la cuenta incorrecta que no tenía permiso para el repositorio que buscaba. Eliminé la clave SSH de la cuenta que no usé, todo funcionó como se esperaba.

Puede probar con qué cuenta se autentica GitHub:

ssh -T [email protected]

Para mí, esto originalmente mostraba el nombre de usuario incorrecto, pero después de eliminar la clave SSH duplicada de esa cuenta, mostró el nombre de usuario correcto y mi extracción y envío a mi repositorio funcionó bien.

Ryan
fuente
8

Sé que esto podría ser un poco tarde, pero estuve atrapado con esto durante bastante tiempo y finalmente lo arreglé así:

captura de pantalla de ejemplo

  • Entrar en acceso a llavero (osX)

  • buscar git (asegúrese de haber seleccionado Todos los elementos)

  • Aquí encontrará las credenciales del culpable. Borra los.

¡Espero que esto ayude!

A.Dev
fuente
¡Esta fue la única respuesta que me ayudó!
Wilder Pereira
Esta respuesta me ayudó a solucionar el problema en mac.
Javascript Hupp Technologies
6

Esta es una forma de hacer esto: puede usar diferentes configuraciones ssh para diferentes cuentas ssh.

Actualizado el 22 de febrero:

Consulte este enlace: https://gist.github.com/2351996

askw0rder
fuente
El Gist vinculado y el primer comentario en la página Gist funcionaron perfectamente para mí. Creo que esto es superior a la respuesta de Walter Mundt, ya que puede dejar varias claves en su llavero y todo "simplemente funciona".
combinaciones de teclas
3

Si cambiar la clave SSH asociada con la cuenta no funciona, cambie el correo electrónico asociado con la cuenta.

Vaya a Github> Configuración de la cuenta> Correos electrónicos y verifique que la dirección de correo electrónico que está utilizando para confirmar coincida con el correo electrónico de la cuenta.

Para ver qué dirección de correo electrónico que está utilizando para cometer, ejecute el siguiente comando: git config --global user.email. Si necesita cambiar la dirección de correo electrónico que está utilizando para confirmar, ejecute git config --global user.email "[email protected]".

Baub
fuente
2

Tengo el mismo problema. A continuación se muestra lo que sucede en mi caso:

Previamente hice git para no pedir mi credencial cada vez que hablo con el repositorio remoto por esto: git config --global credential.helper wincred

Resolví el problema ejecutando el mismo comando con "none" reemplazando "wincred" git config --global credential.helper none

Luego git preguntar mi nombre de usuario / pase de nuevo y todo va bien

Hung Cao
fuente
1

También tuve este problema, pero ninguna de las otras soluciones funcionó para mí. Resulta que para el trabajo habíamos creado un .netrcarchivo que tenía entradas para la autenticación de github. El gitcomando siempre usaba el .netrc, que tenía mi antiguo nombre de usuario y contraseña. Tuve que editar las entradas en mi .netrcarchivo para usar el nuevo nombre de usuario y contraseña.

Steven Lambert
fuente
1

He encontrado una solución temporal en la que primero se ejecuta y killall ssh-agentluego se agregan las claves ssh generadas para la cuenta que necesita usarssh-add ~/.ssh/id_4shameer

Esta es la única forma en que podemos trabajar en la cuenta de github múltiple cuando obtenemos el error de tipo ERROR: Permission to user/repo-git.git denied to username.

mshameer
fuente
1

Nunca tuve ningún problema con git hasta que en el trabajo recientemente conectaron nuestros macbooks a Active Directory y agregaron algunas cuentas de administrador a mi máquina. Sin embargo, después de eso, git funcionaría bien hasta que bloqueé la pantalla y volví. Entonces obtendría un error vago similar a

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.

Solo tengo una clave ssh en esta máquina en particular para mi usuario y estoy usando zsh en mi término. El correo electrónico y el nombre del usuario eran correctos, por lo que ese no era el problema. Ergo, reiniciar después de cada vez que bloqueo mi máquina es inútil. La solución para mí fue editar mi.zshrc archivo y descomentar la línea que exporta la clave ssh (lo que nunca antes había tenido que hacer y he estado usando zsh durante años).

La línea debería verse así:

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

Una vez que hagas esto, simplemente ejecuta una resetterminal y todo funciona bien.

Espero que esto ayude a alguien más.

Andruw Hart
fuente
0

Me gustaría agregar: si está trabajando en la cuenta de otro usuario, asegúrese de agregarse al área de colaboradores en la configuración de repositorios.

Dan Kelly
fuente