Come faccio a inviare a GitHub con un nome utente diverso?


158

Un amico e io stiamo condividendo il mio computer. Ho fatto pressioni su GitHub usando la shell git bash su Windows 7. Ora abbiamo un progetto diverso su quel computer e ho bisogno che lei spinga sul suo account. Ma continua a provare a usare il mio nome utente e a dire che non ho accesso al suo repository:

$ 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

Questo aiuta help.github.com/articles/setting-your-email-in-git (uso git config --global user.name her_username) prima di spingere
Prinzhorn

Vedo che sei passato agli URL HTTPS, quindi Github richiede sempre le credenziali. Ricorda solo che i commit verranno comunque registrati come fatto dall'utente in git config user.name e git config user.email indipendentemente da chi esegue effettivamente il push. ps non credo che ci sia una storia di chi ha spinto cosa.
Jorge Orpinel,

29
git config --local credential.helper ""può fare il trucco.
SOF

Non ho potuto seguire nessuna delle soluzioni fornite qui sul mio sistema Windows. I passaggi riportati in questa risposta ha lavorato finalmente stackoverflow.com/a/15382950/351903
Sandeepan Nath

@SOFe è quello che stavo cercando! Questo comando cancella efficacemente alcune credenziali memorizzate nella cache?
CCJ,

Risposte:


94

Se usi un utente Windows diverso, la tua chiave SSH e le impostazioni git saranno indipendenti.

Se questa non è un'opzione per te, la tua amica dovrebbe aggiungere la tua chiave SSH al suo account Github.

Tuttavia, la soluzione precedente ti farà continuare a spingere come te stesso, ma ti permetterà di spingere nel suo repository. Se non lo desideri e lavori in una cartella diversa sullo stesso PC, puoi configurare nome utente ed e-mail localmente all'interno di una cartella con git rimuovendo il -gflag del comando config:

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

In alternativa, se si passa il httpsprotocollo, Github richiederà sempre nome utente / password (a meno che non si utilizzi un gestore di password).


6
Per quanto ricordo, le chiavi SSH devono essere univoche su Github, non puoi avere la stessa chiave collegata a più account
Gareth,

@Gareth Forse, ma puoi impostare più chiavi SSH per lo stesso utente in Windows (e ovunque io conosca).
Simon Boudrias,

non può avere due chiavi, vedere la mia risposta di seguito.
amorevole

1
Per ogni progetto:git config --global user.name "Mona Lisa"
w3spi,

237

Questo ha funzionato per me, richiederà nome utente e password

git config --local credential.helper ""
git push origin master

1
Grazie, ha funzionato per me, ho usato bitbucket e avrei configurato il mio nome utente, ma questo ha risolto la migrazione a aws code-commit
Alejandro Ruiz,

Avevo helper = cache --timeout=999999impostato il mio .gitignoree questo ha funzionato. Ma un modo per resettarlo senza cambiare una configurazione locale mi chiedo?
Ciro Santilli 7 冠状 病 六四 事件 法轮功

Questo è fantastico!
hargun3045,

Questo è quello che stavo cercando !!!
aagjalpankaj

1
Spiega meglio cosa fa qui: configura il tuo repository locale per ignorare (probabilmente a livello globale) configurato credential.helper, ad esempio l'archivio credenziali di Windows. Questo significa anche che richiede un nome utente / password ogni volta che ne ha bisogno, poiché nulla è configurato, quindi forse puoi anche configurare il credential.helpercache per invece (vedi la risposta di @Ciro Santilli) o utilizzare una risposta diversa qui.
Rugk,

53

Puoi spingere usando un altro account. Ad esempio, se l'account è A che è archiviato in .gitconfig e si desidera utilizzare l'account B che è il proprietario del repository che si desidera inviare.

Account B : B_user_name, B_password
Esempio di collegamento SSH: https://github.com/B_user_name/project.git

La spinta con l' account B è:

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

Per vedere l'account in .gitconfig

  1. $git config --global --list
  2. $git config --global -e (anche per cambiare account)

Caspita questa è la risposta !! Ho impostato user.name, user.emailnella configurazione locale, ho clonato con il nome utente e non funziona; ora l'ultima risposta funziona senza toccare il portachiavi / qualunque cosa ... in Git 2.9.0 in Windows. "finalmente ma non meno importante" .. questo è come si chiama. Grazie. Questa risposta merita più voti.
WesternGun

3
L'unico effetto collaterale è che la tua password / nome utente è registrata nella cronologia di bash .. Ma funziona per me.
WesternGun

Grazie per questo, questo è esattamente quello che volevo fare. Questo spinge a padroneggiare, però. Come potrei spingere verso un ramo oltre al maestro?
Steven Anderson,

2
@WesternGun Non fornire la password nell'URL se si desidera impedire che venga registrata nella cronologia bash. Usa https://'B_user_name'@github.com/B_user_name/project.git. Questo dovrebbe richiedere la password di B_user_name.
subtleseeker,

24

Ho impostato un alias ssh usando un personalizzato IdentityFilee riscritto l'origine per usare il mio me-githubnome host personalizzato .

#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 git@github.com: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

5
Invece di rimuovere quindi aggiungere, possiamo cambiare l'URL remoto di: git remote set-url origin git@user1-github:user1/my-repo.git 😊
Ninh Pham

18

Se si utilizza un URL SSH ( git@github.com:username/projectname.git) anziché un URL HTTPS, è possibile specificare temporaneamente una chiave SSH diversa utilizzando la $GIT_SSH_COMMANDvariabile di ambiente:

$ GIT_SSH_COMMAND="ssh -i different_private_key" git push

Per quanto ne so, con gli URL SSH, GitHub non si preoccupa dei nomi utente, ma solo delle chiavi: se un account utente ha accesso a un repository e quell'account ha una chiave SSH (vedere la pagina Chiavi SSH nell'account impostazioni), quindi se si utilizza quella chiave SSH per inviare a quel repository, il push verrà considerato come proveniente da quell'utente.


1
questo non ha funzionato per me, cosa interessante, cambiando user.namee user.emailin git configcambierà l'account a cui è legato un commit
Kevin Zhao,

Ha funzionato per me. Solo un piccolo commento per rendere la risposta più chiara. "different_private_key" è un file sull'hostA che contiene la chiave privata dell'utente B per conto della quale vogliamo eseguire "git push" sull'hostA che è userA. Devi creare questo file su hostA (ad esempio, come ~ / .ssh / id_rsa_userB) e inserire lì il contenuto del file ~ / .ssh / id_rsa dall'hostB dove esiste l'utenteB. Non importa nemmeno se l'utenteB esiste o non esiste sull'hostA.
Alexander Samoylov,

15

Se dopo aver eseguito git pushGit richiede una password di user, ma desideri spingere come new_user, ti consigliamo di utilizzare git config remote.origin.url:

$ git push
user@my.host.com:either/branch/or/path's password:

A questo punto usare ^Cper uscire git pushe usare follow per premere as new_user.

$ git config remote.origin.url
user@my.host.com:either/branch/or/path

$ git config remote.origin.url new_user@my.host.com:either/branch/or/path

$ git push
new_user@my.host.com:either/branch/or/path's password:

Ciao, ho provato questa soluzione per spingere alla scorta atlassica. Viene visualizzato l'errore "<URL> / info / refs non trovato: hai eseguito git update-server-info sul server?" Non credo di poter eseguire comandi su Stash. Hai un'idea su come risolverlo? Grazie!
Zsolt Szilagyi,

Per GitHub, questo sarebbe simile a:git config remote.origin.url https://different_user@github.com/different_user/repo.git
NumesSanguis

13

È semplice durante la clonazione, per favore prendi l'URL git con il tuo nome utente, mentre commettilo ti chiederà la nuova password utente.

Per esempio:

git clone https: //username@github.com/username/reponame.git

git clone https: //username@bitbucket.org/username/reponame.git


4
Questa risposta dovrebbe avere almeno più voti. Se non fai come dice @Krishna Kavoor, avrai sempre il problema, perché sebbene globalmente tu abbia username1 e localmente tu abbia username2, git proverà ad usare il nome globale.
Markon,

Non funziona. L'ho usato e dico: fatal: repo not found.
WesternGun

1
Funziona sempre Dal momento che ho 3 progetti diversi da 3 clienti diversi. Funziona come un miracolo. Verifica che il percorso del tuo repository sia corretto.
Krishnamoorthy Acharya il

8

se questo è il tuo 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

Oltre a cambiare nome utente ed e-mail dal terminale usando git config:

$ git config --global user.name "Bob"
$ git config --global user.email "bob@example.com"

dovrai rimuovere le informazioni di autorizzazione da Keychain. Questa soluzione mi ha richiesto diverse ore per capire che ho anche avuto un certificato nel mio portachiavi.

Apri l'accesso al portachiavi, fai clic su Tutti gli elementi e cerca git. Elimina tutto il portachiavi


Qual è la controparte di Windows 7 per Keychain?
Thomas Eyde,

Non sono sicuro, ma lo scopriremo
Muyide Ibukun il

Immagino di essere bloccato anche qui. Lo hai scoperto?
Sandeepan Nath il

No, alla fine non l'ho scoperto, ma
suppongo

1
grazie per il suggerimento su come rimuovere le informazioni di autorizzazione da Keychain
Luja Shrestha,

7

Ho usato una macchina per inviare il codice a due diversi account GitHub con nome utente diverso. Supponendo che tu abbia già impostato un account e desideri aggiungerne uno nuovo:

  1. Genera nuova chiave SSH ssh-keygen -t rsa -C "myaddress@example.com"
  2. Salvalo, ma ricorda di non scavalcare quello esistente id_rsa. Dagli un nome diverso, ad esid_rsa_another
  3. Copia il contenuto della chiave sul tuo account GitHub:

Impostazioni -> Chiavi SSH e GPG -> Nuova chiave SSH -> Assegna un'etichetta e incolla la chiave -> Aggiungi chiave SSH

  1. Aggiungi la chiave all'agente ssh: ssh-add ~/.ssh/id_rsa_another
  2. Imposta un host GitHub: crea un file di configurazione con touch ~/.ssh/confige modifica il file fornendo configurazioni ai tuoi account:
#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

Ora dovresti essere in grado di eseguire il push da account diversi a seconda della chiave che aggiungi all'agente ssh, ovvero per utilizzare il tuo primo account, fai ssh-add ~/.ssh/id_rsa .

Potresti anche voler cambiare la tua email utente:

git config --global user.email "myaddress@example.com"

o ripulire le chiavi ssh in caso di errore di autorizzazione quando si mette in pausa il codice su uno degli account:

ssh-add -D


1
Sì, ho già impostato come più account. Ma come posso spingere con il primo account. Puoi per favore condividere il comando?
codemicky,

Cosa intendi con "come posso spingere"? Non git pushfunziona? Dovresti essere in grado di spingere dopo aver aggiunto la chiave
Tomasz Bartkowiak il

Dovresti impostare l'utente per ogni progetto repo $ git config user.email
jasmintmp

6

Vai a Gestione credenziali Vai a Credenziali di Windows Elimina le voci in Credenziali generiche Riprova a connetterti.


Grazie. Il percorso è Control Panel\All Control Panel Items\Credential Manager-> Windows Credentials.
Saheed,

4

Come accennato in precedenza, è possibile utilizzare

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

per impostare manualmente nome utente ed e-mail per singolo repository, ma è necessario aggiungere questo comando:

git commit --amend --reset-author

se hai già provato a spingere prima della modifica. In caso contrario, le modifiche non verranno visualizzate nel file di configurazione.


Questo non è vero. Il --reset-author(con --...) inserirà l'ultimo nome / e-mail configurato sull'ultimo commit e anche l'ultimo timestamp. Non influisce sulle modifiche nel file di configurazione.
Ramon Snir,

3

È possibile aggiungere un nuovo URL remoto per l'altro nome utente utilizzando git remote add origin-username https://username@github.expedia.biz/repository_name.git

Dopodiché, se si spinge utilizzando git push -u origin-username master, questo richiederà la password.


2

git config user.name cambia solo il nome che commetto. Non riesco ancora a spingere. È così che l'ho risolto e penso che sia un modo semplice per me.

  1. Genera una chiave SSH con il nome utente che vuoi spingere sul computer che userai https://help.github.com/articles/connecting-to-github-with-ssh/

  2. Aggiungi questa chiave all'account utente github che vuoi inviare a https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/

  3. Scegli di clonare con SSH

Ora puoi inviare questo utente a quel repository.


2

Se in Windows e l'utente Git per Windows e managerper la gestione delle credenziali (aka Git-Credential-Manager-for-Windows Link ) il problema è che non esiste un modo semplice per passare da un utente all'altro quando si spinge su GitHub httpsusando i OAuthtoken.

Il motivo è che il token è archiviato come:

  • Indirizzo internet: git:https://github.com
  • Nome utente: Personal Access Token
  • Parola d'ordine: OAuth_Token

Le varianti dell'URL in Internet Addressnon funzionano, ad esempio:

  • git:https://username@github.com
  • git:https://github.com/username
  • ...

La soluzione: spazi dei nomi . Questo si trova nei dettagli per la configurazione di Git-Credential-Manager-for-Windows:

Citando da esso:

namespace

Imposta lo spazio dei nomi per le credenziali archiviate.

Per impostazione predefinita, GCM utilizza lo spazio dei nomi 'git' per tutte le credenziali archiviate, l'impostazione di questo valore di configurazione consente il controllo dello spazio dei nomi utilizzato a livello globale o per host.

git config --global credential.namespace name

Ora, memorizza le tue credenziali in Gestione credenziali di Windows come:

  • Indirizzo internet: git.username:https://github.com
  • Nome utente: Personal Access Token
  • Parola d'ordine: OAuth_Token

Si noti che abbiamo modificato: git-> git.username(dove si cambia usernameil nome utente effettivo o, per il gusto di farlo, in qualunque cosa si desideri come identificatore univoco)

Ora, all'interno del repository in cui si desidera utilizzare la voce specifica, eseguire:

git config credential.namespace git.username

(Ancora una volta ... sostituisci usernamecon il valore desiderato)

Il tuo .git/configconterrà ora:

[credential]
    namespace = git.username

Et voilà! Le credenziali giuste verranno estratte dall'archivio credenziali di Windows.

Questo, ovviamente, non cambia l'utente / e-mail che sta spingendo. Per questo devi configurare il solito user.nameeuser.email


Grazie. Questo ha funzionato meglio per me (Windows 10). Nessuna cancellazione temporanea di altri account utente git nelle credenziali di Windows, nessun "hack". Ho un utente git globale / host per tutti i repository. Tranne uno solo di essi richiede credenziali diverse. Se questo si adatta anche al tuo ambiente, lascia tutto come è nelle credenziali di Windows, vai al tuo repository "speciale" e digita git config credential.namespace git.usernamecome indicato (sostituendo il nome utente). Se premi la prossima volta, git ti chiederà le nuove credenziali per il nome utente.
ford04,

2

Non riuscivo a capire come avere una seconda identità di github su una macchina (nessuna di queste risposte ha funzionato per me per quello), ma ho capito come essere in grado di spingere su più account github diversi come me.

Push come stesso nome utente, ma su account github diversi

  1. Imposta una seconda chiave SSH (in questo modo ) per il tuo secondo account github

  2. Cambia tra account così:

Spingi con il mio nuovo secondo account github

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

Spingi con il mio account principale

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


1

Segui i seguenti passi:

  1. Devi capirlo, definisci l'autore prima di impegnarti! i commit sono già bloccati: hanno qualsiasi nome impostato per il loro autore e committer e questi non possono essere cambiati.
# 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 chi è assegnato il commit?
git log
# once you're confirmed that it's tagged to you, then you should move to step 3

Nel caso in cui l'autore abbia torto, puoi facilmente annullare l'ultimo commit senza perdere le modifiche

Inoltre, prima di passare al passaggio 3, non dimenticare di seguire il passaggio 1 per il controllo della sanità mentale.!

  1. datevi una richiesta per inserire github_username e github_password
git config --local credential.helper ""
git push
# it will ask you to enter your github_username and github_password

0

L'ID utente in cui si verifica il commit è memorizzato nel file di configurazione.

vai all'inizio del repository vi .git / config

modifica la riga dell'URL elencata dopo "[origine" remota "] per avere l'id utente appropriato


0

Se usi ssh e ottieni

Autorizzazione a some_username / repository.git negata ad Alice_username

mentre non vuoi spingere come Alice_username, assicurati che Alice_username non abbia la chiave ssh del tuo computer aggiunta al suo account github.

Ho cancellato la mia chiave ssh dall'account github di alice e il push ha funzionato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.