git spinge con l'utente sbagliato dal terminale


112

Ho un problema con git e il mio terminale.

Ecco una galleria per mostrarti il ​​mio problema: http://imgur.com/a/6RrEY

Quando eseguo il push dei commit dal mio terminale, git dice che li spingo con un altro nome utente, che è un utente della mia organizzazione (la mia azienda) senza alcun commit e sembra che non appartenga a nessuno: (controlla la prima foto della galleria)

Ma questo non accade quando uso Github per mac, nel feed vedo i commit spinti da me stesso.

Il problema riguarda anche i miei repository personali, il mio terminale dice che non ho il permesso di inviare commit su quei repository (il che è ovviamente sbagliato) poiché cerca di spingerlo con questo utente: (controlla la seconda foto della galleria)

Indovina un po ? Questo non accade anche con Github per mac.

Ho cambiato il mio computer con uno nuovo di zecca pochi giorni fa, quindi ho ripristinato tutta la mia chiave ssh di github e ne ho lasciato solo uno nuovo generato da Github per Mac, quindi non credo che ci sia qualche chiave utente fantasma / ssh nascosta da qualche parte, questo hdd è nuovo di zecca: (controlla la terza foto della galleria)

Il mio file .gitconfig è tutto chiaro, ci sono solo le mie credenziali: (controlla la quarta foto della galleria)

Davvero non capisco, aiuto, StackOverflow, sei la mia unica speranza.

(Le mie scuse per le mie scarse capacità di Gimp e il riferimento a Star Wars)

EDIT: ssh-add -l mostra solo la buona chiave ssh creata da GitHub per Mac e ho un solo account GitHub

EDIT2: ssh -T git@github.com riconoscimi come un buon utente.

EDIT3: Dopo alcuni test sembra che il mio terminale esegua i commit con il mio nome utente, ma li spinge con l'altro, Github per mac esegue il commit e spinge con il buon nome utente.Questa situazione si verifica con ogni repository che ho / creo (anche nuovo quelli).

EDIT4: In un repository personale git log --pretty="%h %an %ae"mostra il mio buon nome utente

EDIT5: Nessun segno di variabili di ambiente che sovrascriverebbero le mie credenziali nel mio env. Anche se provo a impostare quelle variabili con le buone credenziali il problema persiste.

EDIT6: Le cose funzionano normalmente se forzo l'utente nel percorso /.git/configdi un repository ma non penso che sia la buona opzione:http://USER@github.com/USER/REPO.git

EDIT7: abbiamo eliminato l'utente git che ha inviato i commit per me e questo porta un altro errore:remote: Invalid username or password. fatal: Authentication failed for 'https://github.com/USER/REPO.git/'

MODIFICA FINALE: ho installato git con homebrew, digitato git config --global push.default simple e ora prende le mie credenziali anche senza forzare l'utente. È strano. Grazie a tutti per il vostro aiuto, siete bravissimi ragazzi!


2
controllare ~/.gitconfige $project_root/.git/configfile. Uno di questi due è sicuramente configurato male per il nome utente.
mu 無

1
Grazie per la tua risposta ansh0l. ~/.gitconfigè chiaro e così è $project_root/.git/config. In effetti ho questo problema con ogni progetto personale, i progetti di lavoro possono essere spinti poiché questo altro utente appartiene alla mia organizzazione che possiede quei repository.
Yinfei

Allora hai più account GitHub? Uno per l'azienda, l'altro per uso personale?
mu 無

No, solo uno per tutto.
Yinfei

1
Una soluzione fastidiosa sarebbe semplicemente rigenerare un'altra chiave SSH. Se stai usando la tua attuale chiave SSH con un altro servizio, sarebbe inutile.
Eduardo Bautista

Risposte:


168

Ho appena avuto questo problema al lavoro. Il git integrato che viene fornito con mac o viene fornito quando installi xcode memorizza nella cache le credenziali git nel portachiavi. La soluzione per me era:

avvia l'accesso al portachiavi (avvia Spotlight tramite cmd + spazio, digita portachiavi, premi invio)

Sotto i portachiavi in ​​alto a sinistra, seleziona "login" Nella categoria a sinistra, seleziona "password"

trova il nome "github" ed eliminalo.


2
Assicurati di eliminare tutte le voci di GitHub qui e di impostare la configurazione di accesso * git config --global user.name <name> * git config --global user.email <email>
Shank_Transformer

Nel mio caso, SourceTree stava riscontrando questo problema. L'eliminazione dell'elemento nel portachiavi lo ha risolto!
Shoerob

1
@Shank_Transformer la tua soluzione ha funzionato per me! Grazie!
Nazariy

Potrebbe essere necessario cercare (o avviare direttamente) seahorsesu Ubuntu.
caw

3
Sono in debito con lei signore
Baconbeastnz

46

github ti identifica dalla chiave ssh che vede, non da qualsiasi impostazione di git.

Pertanto, è necessario assicurarsi che la chiave ssh del proprio account di lavoro non sia nel portachiavi quando si tenta di eseguire il push dal proprio account personale e viceversa.

Utilizzare ssh-add -lper determinare quali chiavi sono presenti nel portachiavi e ssh-add -d <keyfile>per rimuovere una chiave dal portachiavi, se funziona, rimuovere la chiave ssh "indesiderata" da ~/.ssh/config.

fonte

NB: Github identificherà comunque il tuo commit solo in base all'email.


5
Questa è l'unica risposta che spiega perché utilizzava costantemente l'account GitHub sbagliato nonostante user.emailfosse impostato correttamente. Vorrei poter votare cinque volte.
Chris

1
nel mio caso la rimozione della chiave ssh ha funzionato a ssh-add -D
meraviglia

Questa è stata l'unica risposta che ha funzionato per me. Grazie!!
Edward Hartnett

L'unica opzione che ha funzionato. Non ha senso perché git non scelga la chiave giusta. Dato che stiamo citando il file ssh, deve essere utilizzato in config.
Revanth Kumar

Quando lo faccio ssh-add -lricevo una risposta che non aiuta. Scrive 4096 SHA256:lotsOfGibberish,about40chars (RSA)non so come farci queste informazioni.
MiguelMunoz

20

Nonostante tutte le ottime opzioni fornite da altri utenti, l'unico modo per risolvere questo problema era reinstallare completamente git e digitare git config --global push.default simpleper riscrivere buone credenziali.


@ VonC, nonostante la tua risposta sia stata ottima, non ha funzionato affatto. Questa è l'unica soluzione che ha funzionato per me. Mi chiedo se sia un problema di git o OSX ...
swilgosz

40
git config --system --unset credential.helperha funzionato per me, ora mi vengono richieste le mie credenziali GitHub su push e posso fornire l'ID utente e la password corretti.
CodeManX

@CoDEmanX la tua è stata l'unica risposta che ha funzionato per me. Per chiunque altro si imbattesse in questo, era perché usiamo 2FA al lavoro con github e dovevo prima generare un token dalla gui di github e usarlo come password dalla riga di comando dopo aver reimpostato le mie credenziali locali! controlla https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/ per i dettagli
vancouverwill

È solo il file .gitconfig. O rimuovilo o ripristinalo ... Ho affrontato questo problema quando ho presentato un progetto di prova per un'intervista. Maledizione però fa male. È con il file di configurazione
Girish

git config --system --unset credential.helpernon funziona su Windows 10 git bash:error: could not lock config file C:/Program Files/Git/mingw64/etc/gitconfig: Permission denied
alex

17

Sto usando Windows 10 e oggi ho affrontato lo stesso problema. Nel mio caso le mie credenziali per un utente diverso sono state salvate da Windows Credential Manager. Quindi eliminando / disinserendo le credenziali git con il comando seguente, git config --global --unset credential.helper

non ha aiutato. Ho dovuto eliminare manualmente la voce in Windows seguendo il modo seguente,

Start -> Pannello di controllo ---> Account utente ---> Gestisci le tue credenziali ---> Credenziali di Windows

Quindi cerca una voce come git: https://github.com e rimuovila. Funziona bene dopo.


Grazie Gowtham
Balint

Grazie, non ho mai avuto questo problema prima su Windows, ma oggi ho avuto questo problema e sono felice di vedere il tuo commento qui.
RaKoDev

Dici che "non ha aiutato" ma se ti ha dato il messaggio che non poteva bloccare il file di configurazione allora il problema è semplicemente che devi eseguirlo da un prompt dei comandi elevato, come è stato sottolineato in un commento sopra .
Stefan il

15

sembra che il mio terminale esegua i commit con il mio nome utente, ma li spinga con l'altro

Il nome e l'email dell'autore e del committer (importanti per GitHub) derivano da:

git config user.name
git config user.email

Tuttavia, come menzionato in git confige git commit-tree, questi valori possono essere sovrascritti dalle variabili di ambiente:

GIT_AUTHOR_NAME
GIT_AUTHOR_EMAIL
GIT_COMMITTER_NAME
GIT_COMMITTER_EMAIL

Quindi ricontrolla quelle variabili.

Le cose funzionano normalmente se costringo l'utente a .git/configaccedere a un repository, ma non penso che sia una buona opzione.

Ma dovrebbe essere una buona soluzione.
Quando si utilizza un URL https, specifico sempre l'utente al suo interno per assicurarmi che l'autenticazione venga eseguita con l'utente giusto.

http://USER@github.com/USER/REPO.git

Grazie per la tua risposta VonC! Sfortunatamente, le mie git configcredenziali sono corrette e non ci sono variabili di ambiente impostate nel mio /username/.bashrcfile ...
Yinfei

@ Yinfei84 comunque, controlla l' envoutput " ".
VonC

@ Yinfei84 cosa succederebbe se (per testarlo) impostassi esplicitamente quelle variabili e provassi un commit e un push. Funzionerebbe meglio allora?
VonC

L'ho appena fatto e il problema persiste.
Yinfei

2
Scusami se sono stato chiaro, volevo dire che funzionava se costringevo l'utente sul percorso come:http://USER@github.com/USER/REPO.git
Yinfei

9

Viene prima eseguita una soluzione temporanea, killall ssh-agentquindi aggiungi le chiavi ssh generate per l'account che devi utilizzaressh-add ~/.ssh/id_4shameer

Ci aiuterà a lavorare su più account GitHub quando avremo l'errore di tipo ERROR: Permission to user/repo-git.git denied to username.


1
L'ho fatto dopo aver rimosso qualsiasi voce Github dal portachiavi di MacOS e ha funzionato perfettamente. Due punti, dopo killall, è necessario riavviare ssh-agent con eval "$(ssh-agent -s)"e ssh-addeseguire il comando con sudo.
arvymetal

7

Se stai usando MAC, vai su Accesso Portachiavi e rimuovi la voce dell'utente per il quale non desideri accedere a Git.


4

La soluzione per me era aggiungere una voce nel mio file ~ / .ssh / config per GitHub. Ho dovuto farlo perché:

  1. Avevo più account GitHub con la stessa chiave (non farlo!)
  2. quando si esegue il "git push" utilizzando ssh, il computer acquisisce id_rsa per impostazione predefinita e lo utilizza come identità ssh.
  3. github non può (non sorprende) deconflicare quale account intendi, dal momento che basa l'account sulla chiave che viene presentato, che se legato a più di un account, porta a un dolore come questo. L'assassino è che, per molto tempo, me la sono cavata liscia e le cose hanno funzionato.

La voce che ho aggiunto è:

Host github.com
    Hostname github.com
    Port 22
    User waterproofpatch
    IdentityFile ~/.ssh/id_rsa_waterproofpatch

Avevo creato un file nuovo chiave, unica per il mio account, come id_rsa_waterproofpatch. Questa voce nella mia configurazione ssh specifica che per le connessioni a github.com, desidero presentare questa chiave.

Un'altra soluzione sarebbe stata probabilmente per me accedere all'altro account, eliminare la chiave ssh duplicata.


2

Ho avuto un problema simile e si è scoperto che il problema era il fatto che il file della chiave pubblica conteneva il mio indirizzo e-mail sull'ultima riga. Sembrava sovrascrivere l'impostazione dell'utente nella mia configurazione. Non appena ho rimosso la mia e-mail dal file .pub (e ricaricato nel mio repository) Git si è connesso utilizzando l'utente corretto.


Questo ha funzionato per me. Non sono sicuro del motivo per cui l'identificatore sul file della chiave pubblica fosse originariamente nel formato "nome @ dominio", ma lo era.
Brian Wagner

1

Quello che ha funzionato per me è stato utilizzare l' URL https del repository Github invece dell'URL ssh . Sono andato alla pagina del progetto Github e ho copiato l'URL https negli appunti, quindi l'ho incollato nel secondo comando di seguito:

git remote rm origin
git remote add origin https://[...]

1

Che dolore nel sedere!

problema:

  1. creare un repository su git hub
  2. clone sulla macchina locale
  3. non può spingere 403.

si trasforma per un motivo sconosciuto che git push utilizzava l'utente sbagliato. Ho un paio di ID utente dell'hub git diversi. Lavoro per 2 aziende diverse e ho anche un ID studente

Sto lavorando su un Mac. ecco cosa ho fatto finalmente

1) rimuovere il credential.helper

  • in qualche modo l'helper delle credenziali è stato impostato su osxkeychain
  • quando ho avviato portachiavi, cliccato su login, password e cercato github ho trovato 3 voci. Non ho idea di come il portachiavi possa sapere quale usare

un. è necessario capire dove è configurato credential.helper

git config --local credential.helper
git config --global credential.helper
git config --system credential.helper

b. una volta trovato il file fig corretto rimuoverlo come segue

git config --global --unset credential.helper

Ora nel mio repository locale ho hackerato il file .git / config

Ho cambiato

    url = https://github.com/aedavids/lab3RotationProject.git

per

    url = https://myGitHubUserId@github.com/aedavids/lab3RotationProject.git

1

Nel mio caso particolare, il problema era che stavo utilizzando a .netrcper accedere github.comed era configurato con un token di un utente diverso:

machine github.com login <another-user-token>

0

la cancellazione del portachiavi non ha aiutato ... Ho dovuto ssh-add -De aggiungere nuovamente la chiave conssh-add <keyfile>


0

Ho risolto questo problema rimuovendo (o rinominando in * .bak) i file id_rsa e id_rsa.pub su MacOS High Sierra. Idea da qui .

Ho reindirizzamenti host personalizzati in ~ / .ssh / config che dovrebbero essere applicati ma utilizzati dall'utente sbagliato prima di rinominare i due file ...


0

Questo è ciò che ha funzionato per me:

  1. Modifica delle credenziali all'interno di .git-credentials
  2. Modifica di user.name e user.email globali all'interno di .gitconfig

0

Cosa ha funzionato per me rimuovendo il repository e aggiungendolo di nuovo:

git remote rm origin
git remote add origin git@github.com:fguillen/MyApp.git

0

Ho lo stesso problema in Windows10 anche dopo aver disinstallato il mio git, poiché @ user542833 dice che è perché la cache di Windows e dovresti rimuovere le credenziali Github in Windows Credential Managere quando provi di nuovo a eseguire il push, Windows chiede le tue credenziali e impostale di nuovo


questo a volte ha funzionato per me, ma anche a volte no.
bvdb

0

Ho appena trascorso 6 ore a capirlo quando si tenta di eseguire il push a un nuovo repository di pagine GitHub su un nuovo account.

Anche dopo aver impostato la configurazione user.name e user.email, l'impostazione predefinita sarebbe il mio account principale.

Questo perché la chiave ssh sarà predefinita su id_rsa (il mio account principale).

Per utilizzare il nuovo account ho dovuto eseguire:

ssh-add ~/.ssh/my_new_key

che quindi farà utilizzare a git la nuova chiave quando si preme.

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.