Git chiede il nome utente ogni volta che spingo


676

Ogni volta che provo a spingere nel mio repo git chiede entrambi username & password.

Non ho problemi a reinserire la mia password ogni volta, ma il problema è nell'inserimento del nome utente. Uso httpsper clonare il mio repository.

Quindi, come posso configurare git in modo che non lo richieda usernamesu ciascuno git push.

Sono nuovo di Linux, ma IIRC in Windows git pushchiede solo password.



@Wug: Ma non voglio archiviare la password. Voglio solo memorizzare il nome utente.
RanRag

4
prova a seguire queste indicazioni e ometti la riga della password.
Wug


c'è anche una risposta su superutente alla tua domanda iniziale - superuser.com/questions/847181/…
dk14

Risposte:


975

Modifica (di @ dk14 come suggerito dai moderatori e dai commenti)

ATTENZIONE: se si utilizza credential.helper storedalla risposta, la password verrà memorizzata completamente non crittografata ("così com'è") in ~/.git-credentials. Si prega di consultare la sezione commenti qui sotto o le risposte dalla sezione "Collegata", soprattutto se il proprio datore di lavoro ha tolleranza zero per problemi di sicurezza.

Anche se accettato, non risponde alla vera domanda del PO sull'omissione di un solo nome utente (non password). Per i lettori con questo esatto problema, la risposta di Grawity potrebbe tornare utile.


Risposta originale (di @Alexander Zhu):

Puoi archiviare le tue credenziali usando il seguente comando

$ git config credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

Inoltre ti consiglio di leggere
$ git help credentials


161
Attenzione, non esiste sicurezza in questo metodo. La tua password è memorizzata come testo in chiaro.
Mark Lakata,

13
si possono trovare modi migliori per raggiungere la sicurezza qui - stackoverflow.com/a/28104587/1809978
dk14

4
@MarkLakata - Per favore, dimmi come posso annullare il comando in questa risposta? Dopo averlo annullato, userò un metodo sicuro per archiviare le credenziali.
MasterJoe2,

25
@ testerjoe2 trygit config --unset credential.helper
dk14

1
Non dimenticare di impostare il timeout, il valore predefinito è 15min - Imposta il valore su 30 milioni per avere circa 1 anno. Trovato qui: stackoverflow.com/a/35942890/1579667
Benj

181

Puoi farlo nel .git/configfile del tuo repository locale. Questo file contiene una sezione chiamata "remote" con una voce chiamata "url". La voce 'url' dovrebbe contenere il link https del repository di cui stai parlando.

Quando si antepone l'host 'url' con il proprio nome utente, gitnon si dovrebbe più chiedere il nome utente. Ecco un esempio:

url = https://username@repository-url.com

5
Se usi caratteri speciali nel tuo nome utente o pw, dovresti evitarli. Vedi en.wikipedia.org/wiki/Percent-escape per i personaggi di fuga giusti. ad esempio "! @ #" [senza virgolette] verrebbe sostituito da "% 21% 40% 23". Vedi anche la risposta "Daniel Lerch" di seguito
nsof

1
Le altre persone che lavorano sullo stesso repository vedranno il mio nome utente?
CodyBugstein,

17
Questa dovrebbe essere la risposta corretta alla domanda del PO, ovvero "come mantenere il nome utente, NON la password". Non solo questa risposta è il modo corretto di mantenere il nome utente, ma evita anche il possibile rischio per la sicurezza git config credential.helper store.
RayLuo,

Sono grato per questa risposta e ho provato in questo modo, ma mi chiede sempre ogni volta (v 2.1.4) - ho provato il remoteurl con nome@gitlab.com E nome%40mailaddress.com@gitlab.com - mi chiede sempreusername for https://gitlab.com:
eli,

1
Ho provato questo e ho ottenutounable to access 'https://<me>@bitbucket.org:<x>/<y>.git/': Illegal port number
Ian Grainger il

118

Autenticazione permanente con i repository Git

Eseguire il comando seguente per abilitare la memorizzazione nella cache delle credenziali:

$ git config credential.helper store
$ git push https://github.com/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>

L'uso deve anche specificare la scadenza della memorizzazione nella cache

git config --global credential.helper "cache --timeout 7200"

Dopo aver abilitato la memorizzazione nella cache delle credenziali, verrà memorizzato nella cache per 7200 secondi (2 ore) .


Leggi le credenziali Documenti

$ git help credentials

Ho impostato il timeout su 7200. Ma poi ho pensato di impostarlo su 5 per il test. Quindi l'ho impostato su 5, ma poi quando ho provato a spingere di nuovo dopo 30 secondi, ma non mi è stato chiesto il nome utente o la password.
Buttle Butkus,

Le credenziali potrebbero non essere archiviate a livello globale.
Jay Patel,

Per quanto riguarda la sicurezza, vale la pena fare riferimento ai documenti: "Questo comando memorizza nella cache le credenziali per l'uso da parte dei futuri programmi Git. Le credenziali archiviate non toccano mai il disco e vengono dimenticate dopo un timeout configurabile." git-scm.com/docs/git-credential-cache
mloskot

2
non è il git config credntial.helper storecomando così pericoloso, che è responsabile della memorizzazione delle credenziali in chiaro nel file ~ / .git-credentials? Penso (e nella mia esperienza) il comando ... cache ...- è sufficiente: git config --clogal credential.helper 'cache --timeout 7200'crea il dir: ~/.git-credential-cachecon il file cache in esso Quindi, basta eseguire questo comando e NON il comando "... store"
eli,

Non ha funzionato per me. Ancora chiedendo la password ogni volta
Ian Grainger il

75

Aggiungi nuove chiavi SSH come descritto in questo articolo su GitHub .

Se Git ti chiede ancora nome utente e password, prova a passare https://github.com/a git@github.com:nell'URL remoto:

$ git config remote.origin.url 
https://github.com/dir/repo.git

$ git config remote.origin.url "git@github.com:dir/repo.git"

19
Questa dovrebbe essere la risposta giusta! Salvare le tue credenziali è incredibilmente non sicuro. Se ho una chiave SSH in atto, mi sta chiedendo le mie credenziali solo perché non ho l'URL corretto come indicato qui.
Alexis Wilke,

2
oppure puoi usaregit config remote.origin.url "ssh://git@yourRepoHost/yourRepoName.git"
ndarkness il

1
git config remote.origin.url git@gitlab.com: adammajewski / ray-backward-iteration.git
Adam

1
Grazie, questa è la risposta che stavo cercando.
Yupeng Tang,

50

Il modo più semplice che ho trovato è stato con questo comando:

git config --global credential.https://github.com.username <your_username>

Funziona su un sito per sito e modifica la tua configurazione globale git.

Per visualizzare le modifiche, utilizzare:

git config --global --edit

1
Per qualche ragione questo è stato l'unico metodo che ha funzionato per me. Grazie!
mathetes,

questo metodo è sicuro? la password di github è memorizzata solo sul computer locale e non viene inviata a github?
Akin Hwan,

Non so perché questa non sia la risposta approvata, il comando funziona perfettamente e risponde pienamente e solo alla domanda: memorizzazione di username, non password. Grazie Ben!
AmaelH,

Puoi anche eseguire: [git config --global credential.helper 'cache --timeout = 3600'] Quindi la tua password verrà salvata per un'ora ogni volta
obenda

31

Se stai usando https invece di ssh, puoi modificare "url" in .git/configcome dice user701648, ma se vuoi puoi aggiungere anche la password:

url = https://username:password@repository-url.com

1
Cosa succede se @incluso nella mia password? url = https://username:abc@123@repository-url.comMi sta dando un erroreCould not resolve host: @123@git.com
Rahul Mankar,

La usernameparte sembra essere ignorata quando il server reindirizza (ad esempio da FOO a FOO.git).
Mikhail T.

22

Puoi impostare il tuo nome utente per tutti i repository in un determinato sito inserendo qualcosa di simile al seguente nel tuo file di configurazione di Git. Ti consigliamo di cambiare " https://example.com " e "me" con l'URL effettivo e il tuo nome utente effettivo.

[credential "https://example.com"]
    username = me

(Questo è direttamente da "credenziali di aiuto git")


16

La modifica del repository clonato funziona:

git remote set-url origin git@github.com:gitusername/projectname.git

L'uso delle credenziali memorizzate nella cache funziona e l'impostazione del periodo di timeout rende le cose meno fastidiose. Se si utilizza l'helper delle credenziali di Windows, questo dovrebbe essere il metodo più semplice (soprattutto se SSH è bloccato).


Questa è una risposta corretta per GitHub (che la domanda si sta ponendo in modo specifico ... (non sono sicuro del motivo per cui sei stato sottovalutato).
Tim Groeneveld

12

Assicurati di utilizzare SSH anziché http. Controlla questa risposta SO.


3
Ma ho dovuto usarlo httpperché nella mia università sshè bloccato dal dipartimento amministratore di sistema.
RanRag

Quindi forse questo link ti aiuterà.
gkris,

C'è una pagina di aiuto ufficiale di GitHub su questo ora. Quello che è successo per me è stato che ho clonato uno dei miei repository prima di accedere in modo che non mi riconoscesse e, per impostazione predefinita, ho impostato HTTPS. help.github.com/articles/changing-a-remote-s-url
anon58192932

12

git config --global credential.helper cache


1
Questa è una risposta migliore su Linux.
Larry,

9

Oltre alla risposta di user701648, è possibile archiviare le credenziali nella cartella principale (globale per tutti i progetti), anziché nella cartella del progetto utilizzando il comando seguente

$ git config --global credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

9

Quando ho solo git pull , git pull origin xxx , git chiede sia username che password.

git config credential.helper store

Funziona.


9

Il modo più semplice è creare un ~/.netrcfile con i seguenti contenuti:

machine github.com
login YOUR_GITHUB_USERNAME
password YOUR_GITHUB_PASSWORD

(come mostrato qui: https://gist.github.com/ahoward/2885020 )

Puoi persino chiudere le autorizzazioni su questo file in modo che nessuno possa leggere la tua password digitando:

chmod 600 ~/.netrc

6

Se usi la versione SSH , non avrai problemi con le password. Solo una volta generi la chiave SSH , per dire a git, che questo pc funzionerà con questo account github e non mi chiederà mai più alcun accesso (per questo pc).

Come generare SSH per Github


4

Per evitare di inserire il nome utente, ma ti viene comunque richiesto di inserire una password, puoi semplicemente clonare il tuo repository incluso il nome utente:

git clone user_name@example.gitrepo.com/my_repo.git


3

ssh+ key authenticationè un modo più affidabile di https+credential.helper

È possibile configurare l'utilizzo di SSH anziché HTTPS per tutti i repository come segue:

git config --global url.ssh://git@github.com/.insteadOf https://github.com/

url.<base>.insteadOfè documentato qui .


2

Metodo rapido

ottieni l'URL del tuo git quando sei dentro dir di lavoro:

git config remote.origin.url

poi :

git config credential.helper store

git push "url of your git"

chiederà nome utente e password l'ultima volta

fatto.


1

Puoi semplicemente correre

git config --global credential.helper wincred

dopo l'installazione e l'accesso a GIT per Windows nel sistema.


Non ho visto la parola Linux nella query. My bad
cyperpunk

1

(Solo per Mac OS)

per Windows e Linux fare riferimento al collegamento alla documentazione di Github menzionato di seguito.

Dalla documentazione di Github: Link alla documentazione

Memorizzazione nella cache della password di GitHub in Git

  • Per utilizzare l'helper delle credenziali di osxkeychain è necessario Git 1.7.10 o versioni successive.

    per verificare la tua versione di Git: git --version

  • per scoprire che l'helper di osxkeychain è già installato:

    git credential-osxkeychain

    se ricevi la seguente risposta, l'hai già installata e pronta per l'uso sul tuo Mac:

    > Usage: git credential-osxkeychain <get|store|erase>

    se non si ottiene una risposta come mostrato sopra, è possibile installarlo eseguendo il comando seguente:

    git credential-osxkeychain

  • per dire a git di usare globalmente osxkeychain per le credenziali git:

    git config --global credential.helper osxkeychain

    Verrà richiesto una volta prima di salvare le credenziali nel portachiavi .

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.