¿Cómo presiono a GitHub con un nombre de usuario diferente?

158

Un amigo y yo estamos compartiendo mi computadora. He hecho cambios a GitHub usando el shell git bash en Windows 7. Ahora estamos en un proyecto diferente en esa computadora y necesito que ingrese a su cuenta. Pero sigue intentando usar mi nombre de usuario y dice que no tengo acceso a su repositorio:

$ git push her_github_repository our_branch
ERROR: Permission to her_username/repository.git denied to my_username.
fatal: The remote end hung up unexpectedly
a.
fuente
¿Esto ayuda help.github.com/articles/setting-your-email-in-git (use git config --global user.name her_username) antes de presionar?
Prinzhorn
Veo que cambiaste a URL de HTTPS, por lo que github siempre solicita credenciales. Solo recuerde que las confirmaciones se seguirán registrando como lo hizo el usuario en git config user.name y git config user.email, independientemente de quién haga el envío. PD: No creo que haya una historia de quién empujó qué.
Jorge Orpinel
29
git config --local credential.helper ""puede hacer el truco.
SOFe
No pude seguir ninguna de las soluciones dadas aquí en mi sistema de Windows. Los pasos dados en esta respuesta funcionaron finalmente stackoverflow.com/a/15382950/351903
Sandeepan Nath
@SOFe eso es lo que estaba buscando! ¿Este comando borra efectivamente algunas credenciales almacenadas en caché?
CCJ

Respuestas:

94

Si utiliza un usuario de Windows diferente, su clave SSH y la configuración de git serán independientes.

Si esta no es una opción para usted, entonces su amiga debe agregar su clave SSH a su cuenta de Github.

Aunque, la solución anterior te mantendrá presionando como a ti mismo, pero te permitirá presionar en su repositorio. Si no desea esto y trabaja en una carpeta diferente en la misma PC, puede configurar el nombre de usuario y el correo electrónico localmente dentro de una carpeta con git eliminando la -gbandera del comando config:

git config user.name her_username
git config user.email her_email

Alternativamente, si presiona el httpsprotocolo, Github le solicitará un nombre de usuario / contraseña cada vez (a menos que use un administrador de contraseñas).

Simon Boudrias
fuente
66
Hasta donde recuerdo, las claves SSH tienen que ser únicas en Github, no puede tener la misma clave adjunta a varias cuentas
Gareth el
@Gareth Quizás, pero puede configurar múltiples claves SSH para el mismo usuario en Windows (y en todas partes que conozco).
Simon Boudrias
no puedo tener dos llaves, mira mi respuesta a continuación.
chovy
1
Para todos los proyectos:git config --global user.name "Mona Lisa"
w3spi
237

Esto funcionó para mí, solicitará nombre de usuario y contraseña

git config --local credential.helper ""
git push origin master
guardagujas
fuente
1
Gracias, funcionó para mí, utilicé Bitbucket y configuré mi nombre de usuario, pero esto resolvió la migración a aws code-commit
Alejandro Ruiz
Me había helper = cache --timeout=999999puesto en mi .gitignorey esto funcionó. ¿Pero alguna forma de restablecer eso sin cambiar una configuración local me pregunto?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
¡Esto es increíble!
hargun3045
¡¡¡Esto es lo que estaba buscando!!!
aagjalpankaj
1
Explica mejor lo que hace aquí: configura tu repositorio local para ignorar la configuración (probablemente global) credential.helper, por ejemplo, el almacén de credenciales de Windows. Esto también significa que solicita un nombre de usuario / contraseña cada vez que lo necesita, ya que no hay nada configurado, por lo que tal vez también pueda configurar el credential.helpercaché (consulte la respuesta de @Ciro Santilli) o use una respuesta diferente aquí.
Rugk
53

Puede presionar con el uso de una cuenta diferente. Por ejemplo, si su cuenta es A, que está almacenada en .gitconfig y desea usar la cuenta B, que es el propietario del repositorio que desea enviar.

Cuenta B : B_user_name, B_password
Ejemplo de enlace SSH: https://github.com/B_user_name/project.git

El impulso con la cuenta B es:

$ git push https://'B_user_name':'B_password'@github.com/B_user_name/project.git

Para ver la cuenta en .gitconfig

  1. $git config --global --list
  2. $git config --global -e (para cambiar la cuenta también)
Thotruong
fuente
Wow esta es la respuesta !! He configurado user.name, user.emailen la configuración local, he clonado con el nombre de usuario, y no funciona; ahora la última respuesta funciona sin tocar el llavero / lo que sea ... en Git 2.9.0 in Windows. "por fin pero no menos importante" ... así se llama. Gracias. Esta respuesta merece más votos positivos.
WesternGun
3
El único efecto secundario es que su contraseña / nombre de usuario se registra en el historial de bash ... Pero funciona para mí.
WesternGun
Gracias por esto, esto es exactamente lo que quería hacer. Sin embargo, esto empuja a dominar. ¿Cómo empujaría a una rama además del maestro?
Steven Anderson el
2
@WesternGun No proporcione contraseña en la URL si desea evitar que se registre en el historial de bash. Uso https://'B_user_name'@github.com/B_user_name/project.git. Esto debería solicitar la contraseña de B_user_name.
subtleseeker
24

Configuré un alias ssh usando un personalizado IdentityFiley reescribí el origen para usar mi me-githubnombre de host personalizado .

#when prompted enter `id_rsa_user1` as filename
ssh-keygen -t rsa

# ~/.ssh/config
Host user1-github
HostName github.com
Port 22
User git
IdentityFile ~/.ssh/id_rsa_user1

#check original remote origin url
git remote -v
origin [email protected]:user1/my-repo.git

#change it to use your custom `user1-github` hostname
git remote rm origin
git remote add origin git@user1-github:user1/my-repo.git
chovy
fuente
55
En lugar de eliminar y luego agregar, podemos cambiar la URL remota por: git remote set-url origin git@user1-github:user1/my-repo.git 😊
Ninh Pham
18

Si usa una URL SSH ( [email protected]:username/projectname.git) en lugar de una URL HTTPS, puede especificar temporalmente una clave SSH diferente utilizando la $GIT_SSH_COMMANDvariable de entorno:

$ GIT_SSH_COMMAND="ssh -i different_private_key" git push

Hasta donde puedo decir, con las URL SSH, a GitHub no le importan los nombres de usuario, solo las claves: si una cuenta de usuario tiene acceso a un repositorio y esa cuenta tiene una clave SSH (consulte la página de claves SSH en la cuenta configuración), luego, si usa esa clave SSH para enviar a ese repositorio, la inserción se tratará como si viniera de ese usuario.

David Moles
fuente
1
esto no funcionó para mí, de manera interesante, el cambio de la user.namey user.emailen git configcambiará la cuenta de que una confirmación se relaciona con
Kevin Zhao
Funcionó para mi. Solo un pequeño comentario para aclarar la respuesta. "different_private_key" es un archivo en el hostA que contiene la clave privada del usuarioB en nombre del cual queremos realizar "git push" en el hostA que es el usuarioA. Debe crear este archivo en el hostA (por ejemplo, como ~ / .ssh / id_rsa_userB) y colocar allí el contenido del archivo ~ / .ssh / id_rsa desde el hostB donde existe el usuario B. Incluso no importa si el usuarioB existe o no existe en el hostA.
Alexander Samoylov el
15

Si después de ejecutar git pushGit solicita una contraseña de user, pero desea presionar como new_user, puede usar git config remote.origin.url:

$ git push
[email protected]:either/branch/or/path's password:

En este punto, use ^Cpara salir git pushy use el siguiente para presionar como new_user.

$ git config remote.origin.url
[email protected]:either/branch/or/path

$ git config remote.origin.url [email protected]:either/branch/or/path

$ git push
[email protected]:either/branch/or/path's password:
Lukasz Czerwinski
fuente
Hola, probé esta solución para empujar al alijo atlassian. Aparece el error "<URL> / info / refs no encontrado: ¿ejecutó git update-server-info en el servidor?" No creo que pueda ejecutar comandos en Stash. ¿Tienes una idea de cómo resolver esto? ¡Gracias!
Zsolt Szilagyi
Para GitHub, esto se vería así:git config remote.origin.url https://[email protected]/different_user/repo.git
NumesSanguis
13

Es simple durante la clonación, tome la URL de git con su nombre de usuario. Mientras se compromete le pedirá su nueva contraseña de usuario.

P.ej:

git clone https: //[email protected]/username/reponame.git

git clone https: //[email protected]/username/reponame.git

Krishnamoorthy Acharya
fuente
44
Esta respuesta debería tener más votos positivos al menos. Si no haces lo que dice @Krishna Kavoor, siempre tendrás el problema, porque aunque globalmente tienes nombre de usuario1 y localmente tienes nombre de usuario2, git intentará usar el nombre global.
Markon
No funciona. Lo utilicé y digo: fatal: repo not found.
WesternGun
1
Funciona siempre ya que tengo 3 proyectos diferentes de 3 clientes diferentes. Funciona como un milagro. Comprueba que tu ruta de repositorio sea correcta.
Krishnamoorthy Acharya
8

si este es tu problema

remote: Permission to username1/repo.git denied to username2.
fatal: unable to access 'https://github.com/username1/repo.git/':
The requested URL returned error: 403

Además de cambiar el nombre de usuario y el correo electrónico desde la terminal usando git config:

$ git config --global user.name "Bob"
$ git config --global user.email "[email protected]"

deberás eliminar la información de autorización de Keychain. Esta solución me tomó varias horas para darme cuenta. Descubrí que también tenía un certificado en mi Llavero.

Abra el acceso a Llavero, haga clic en Todos los artículos y busque git. Eliminar todo el llavero

Muyide Ibukun
fuente
¿Cuál es la contraparte de Windows 7 para Keychain?
Thomas Eyde
No estoy seguro, pero lo descubriré
Muyide Ibukun
Supongo que estoy atrapado aquí también. ¿Te diste cuenta?
Sandeepan Nath
No, eventualmente no lo descubrí, pero supongo que no debería ser tan difícil
Muyide Ibukun
1
gracias por la sugerencia sobre la eliminación de información de autorización del llavero
Luja Shrestha
7

He estado usando una máquina para insertar código en dos cuentas de GitHub diferentes con un nombre de usuario diferente. Suponiendo que ya configuró una cuenta y desea agregar una nueva:

  1. Generar nueva clave SSH ssh-keygen -t rsa -C "[email protected]"
  2. Guárdelo, pero recuerde no anular el existente id_rsa. Dale un nombre diferente, por ejemploid_rsa_another
  3. Copie el contenido de la clave a su cuenta de GitHub:

Configuración -> SSH y claves GPG -> Nueva clave SSH -> Dar una etiqueta y pegar la clave -> Agregar clave SSH

  1. Agregue la clave al agente ssh: ssh-add ~/.ssh/id_rsa_another
  2. Configure un host GitHub: cree un archivo de configuración touch ~/.ssh/configy edítelo proporcionando configuraciones a sus cuentas:
#first account
Host github.com-first
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa

#another account
Host github.com-another
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa_another

Ahora debería poder enviar desde diferentes cuentas dependiendo de la clave que agregue al agente ssh, es decir, para usar su primera cuenta ssh-add ~/.ssh/id_rsa.

También es posible que desee cambiar su correo electrónico de usuario:

git config --global user.email "[email protected]"

o limpie las claves ssh en caso de error de permiso al poner el código en una de las cuentas:

ssh-add -D

Tomasz Bartkowiak
fuente
1
Sí, ya configuré como varias cuentas. Pero, ¿cómo puedo presionar con la primera cuenta. ¿Puedes por favor compartir el comando?
Codemicky
¿Qué quieres decir con "cómo puedo empujar"? No git pushfunciona Debería poder presionar después de agregar su clave
Tomasz Bartkowiak
Debe configurar el usuario para cada proyecto de repositorio $ git config user.email
jasmintmp
6

Vaya al Administrador de credenciales Vaya a Credenciales de Windows Elimine las entradas en Credenciales genéricas Intente conectarse nuevamente.

Deepak
fuente
Gracias. El camino es Control Panel\All Control Panel Items\Credential Manager-> Windows Credentials.
Saheed
4

Como se mencionó anteriormente, puede usar

git config user.name her_username
git config user.email her_email

para configurar manualmente el nombre de usuario y el correo electrónico para un repositorio único, pero debe agregar este comando:

git commit --amend --reset-author

si ya ha intentado presionar antes del cambio. De lo contrario, los cambios no aparecen en el archivo de configuración.

Martin819
fuente
Esto no es verdad. El --reset-author(con --...) colocará el último nombre / correo electrónico configurado en la última confirmación, y también la última marca de tiempo. No afecta los cambios en el archivo de configuración.
Ramon Snir
3

Puede agregar una nueva URL remota para el otro nombre de usuario usando git remote add origin-username https://[email protected]/repository_name.git

Después de esto, si presionas el uso git push -u origin-username master, te pedirá la contraseña.

Raman Singh
fuente
2

git config user.name solo cambia el nombre que confirmo. Todavía no puedo empujar. Así es como lo resolví, y creo que es una manera fácil para mí.

  1. Genere una clave SSH con el nombre de usuario que desea insertar en la computadora que usará https://help.github.com/articles/connecting-to-github-with-ssh/

  2. Agregue esta clave a la cuenta de usuario de github que desea enviar a https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/

  3. Elija clonar con SSH

Puede ingresar como este usuario a ese repositorio ahora.

Yang Fang
fuente
2

Si en Windows y el usuario Git para Windows y managerpara administrar las credenciales (también conocido como Git-Credential-Manager-for-Windows Enlace ), el problema es que no hay una manera fácil de cambiar entre los usuarios al presionar a GitHub sobre el httpsuso de OAuthtokens.

La razón es que el token se almacena como:

  • Dirección de Internet: git:https://github.com
  • Nombre de usuario Personal Access Token
  • Contraseña: OAuth_Token

Las variaciones de la URL Internet Addressno funcionan, por ejemplo:

La solución: espacios de nombres . Esto se encuentra en los detalles para la configuración de Git-Credential-Manager-for-Windows:

Citando de ello:

espacio de nombres

Establece el espacio de nombres para las credenciales almacenadas.

De manera predeterminada, el GCM utiliza el espacio de nombres 'git' para todas las credenciales almacenadas, establecer este valor de configuración permite el control del espacio de nombres utilizado globalmente o por host.

git config --global credential.namespace name

Ahora, guarde su credencial en el Administrador de credenciales de Windows como:

  • Dirección de Internet: git.username:https://github.com
  • Nombre de usuario Personal Access Token
  • Contraseña: OAuth_Token

Tenga en cuenta que hemos cambiado: git-> git.username(donde cambia usernamea su nombre de usuario real o por el bien, a lo que desee como identificador único)

Ahora, dentro del repositorio donde desea usar la entrada específica, ejecute:

git config credential.namespace git.username

(De nuevo ... reemplace usernamecon el valor deseado)

Tu .git/configcontendrá ahora:

[credential]
    namespace = git.username

Et voilá! La credencial correcta se extraerá del Almacén de credenciales de Windows.

Esto, por supuesto, no cambia qué usuario / correo electrónico está presionando. Para eso tienes que configurar lo habitual user.nameyuser.email

mementum
fuente
Gracias. Esto funcionó mejor para mí (Windows 10). Sin eliminación temporal de otras cuentas de usuario de git en Windows Credentials, sin "hacks". Tengo un usuario git global / host para todos los repositorios. Excepto que solo uno de ellos requiere credenciales diferentes. Si eso también se ajusta a su entorno, simplemente deje todo como está en las credenciales de Windows, vaya a su repositorio "especial" y escriba git config credential.namespace git.usernamecomo se menciona (reemplazando el nombre de usuario). Si presiona la próxima vez, git le pedirá las nuevas credenciales para el nombre de usuario.
Ford04
2

No pude descubrir cómo tener una segunda identidad de github en una sola máquina (ninguna de estas respuestas me funcionó para eso), pero sí descubrí cómo poder empujar a varias cuentas de github diferentes como yo.

Presione como el mismo nombre de usuario, pero a diferentes cuentas de github

  1. Configure una segunda clave SSH ( así ) para su segunda cuenta de github

  2. Cambiar entre cuentas así:

Empuje con mi nueva segunda cuenta de github

ssh-add -D
ssh-add ~/.ssh/ssh_key_for_my_2nd_account
git push

Empujar con mi cuenta principal

ssh-add -D
ssh-add ~/.ssh/id_rsa   
git push
kris
fuente
1

Siga los siguientes pasos:

  1. ¡Debes entender eso, debes definir el autor antes de comprometerte! los commits ya están congelados: tienen el nombre establecido para su autor y committer, y no se pueden cambiar.
# you can check what's currently:
git config user.name
git config user.email

git config user.name "your_github_username"
git config user.email "your_github_email"

# Again check what's currently:
git config user.name
git config user.email
  1. ¿Verifica a quién está etiquetado tu commit?
git log
# once you're confirmed that it's tagged to you, then you should move to step 3

En caso de que el autor esté equivocado, puede deshacer fácilmente la última confirmación sin perder los cambios.

Además, antes de pasar al paso 3, ¡no olvide seguir el paso uno para verificar la cordura!

  1. date un aviso para ingresar github_username y github_password
git config --local credential.helper ""
git push
# it will ask you to enter your github_username and github_password
aakriti
fuente
0

El ID de usuario donde ocurre la confirmación se almacena en el archivo de configuración.

ir a la parte superior del repositorio vi .git / config

cambie la línea de URL que aparece después de "[origen" remoto "] para tener el ID de usuario apropiado

wainCam
fuente
0

Si usas ssh y obtienes

Permiso para some_username / repository.git denegado a Alice_username

Si bien no desea presionar como Alice_username, asegúrese de que Alice_username no tenga la clave ssh de su computadora agregada a su cuenta de github.

Eliminé mi clave ssh de la cuenta github de alice y el empuje funcionó.

Achraf Amil
fuente