vai ottieni i risultati nell'errore "prompt del terminale disabilitato" per il repository privato github


187

Ho creato l'esempio di repository privato / myprivaterepo utilizzando l'interfaccia utente di Github dal mio browser.

Quindi sono andato alla mia directory go (sul desktop) e l'ho clonato:

$ cd $GOPATH
$ go get github.com/examplesite/myprivaterepo

Fin qui tutto bene. Creato il file scheduler.go, aggiunto al repository e inviato.

$ vim scheduler.go
$ git add scheduler.go
$ git commit
$ git push

Va tutto bene. Ma quando sono andato su un laptop pulito e ho provato a clonare il repository, ho avuto un errore:

# Now on laptop, which doesn't yet know about the repo
$ cd $GOPATH
$ go get github.com/examplesite/myprivaterepo
# At this point it should ask for my user ID and password ,right? But it doesn't.
# Instead, this error occurs:
cd .; git clone https://github.com/examplesite/myprivaterepo /Users/tom/go/src/github.com/examplesite/myprivaterepo
Cloning into '/Users/tom/go/src/github.com/examplesite/myprivaterepo'...
fatal: could not read Username for 'https://github.com': terminal prompts disabled
package github.com/examplesite/myprivaterepo: exit status 128

Perché il mio laptop odia il mio repository e come posso farlo accettare il suo destino? Grazie.


10
Questo non è un goerrore, gitsta restituendo "prompt dei terminali disabilitati". Puoi correre git clone https://github.com/examplesite/myprivatereposul tuo laptop?
JimB,

1
Grazie. Il clone git ha funzionato. Quindi il gioco si fa lavorare. Qual è l'accordo? Devo "adescare la pompa" in questo modo ogni volta o ho configurato male qualcosa?
tomcam,

1
@tomcam, puoi aggiungere chiavi ssh all'account github e andare funzionerà dall'inizio, vedi help.github.com/articles/generating-ssh-keys
alex vasi

@alexvasi: funziona solo se prima clona il repository su ssh, poiché richiederà https://github.com/se il percorso di importazione non esiste. Il processo git dovrebbe essere in grado di richiedere nome utente / password, quindi ci deve essere qualcosa di diverso nella configurazione del laptop: shell diversa, diverso .gitconfig, una variabile env, ecc.
JimB

Tutto ciò mi ha aiutato, ma non sono sicuro di come contrassegnare come risposto e / o risolto. Ecco cosa ho finora.
Tomcam

Risposte:


175

go get disabilita il "prompt del terminale" per impostazione predefinita. Questo può essere modificato impostando una variabile d'ambiente di git:

env GIT_TERMINAL_PROMPT=1 go get github.com/examplesite/myprivaterepo

307

L'ho trovato estremamente utile e ha risolto il mio problema. Questo comando consentirà a 2FA di fare le sue cose (e di risparmiare la difficoltà di inserire nome utente e password):

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

Fonte: http://albertech.blogspot.com/2016/11/fix-git-error-could-not-read-username.html

Se non stai usando 2FA, puoi comunque usare SSH e questo funzionerà.

Modifica: aggiunta la --addbandiera come suggerito da slatunje .


12
Ti consiglio di aggiungere --add flag in modo da non sovrascrivere le impostazioni esistenti che potresti avere Ad esempio:git config --global --add url."git@github.com:".insteadOf "https://github.com/"
slatunje

Grazie slatunje, ho aggiunto la bandiera alla mia risposta in base al tuo feedback.
Wylliam Judd,

5
Questa è la migliore soluzione IMO. È più sicuro e meno sforzo (una volta impostato) utilizzare le chiavi SSH per auth invece di username / password
bodecker

1
Non farlo su Windows. Ho finito con l'errore git@github.com: Permission denied (publickey). fatal: Could not read from remote repository..
Shital Shah,

1
funziona anche per Linux. dovrebbe funzionare per tutti se stai usando ssh globaly
Chiptus

39

1o: go getrifiuterà di autenticarsi sulla riga di comando. Quindi è necessario memorizzare nella cache le credenziali in git. Perché io uso osx posso usare l'helper di credenziali osxkeychain.

2 ° Per me, ho 2FA abilitato e quindi non ho potuto usare la mia password per auth. Invece ho dovuto generare un token di accesso personale da utilizzare al posto della password.

  1. imposta helper credenziali osxkeychain https://help.github.com/articles/caching-your-github-password-in-git/
  2. Se si utilizza TFA anziché utilizzare la password, generare un token di accesso personale con ambito repo https://github.com/settings/tokens
  3. git clona un repository privato solo per memorizzarlo nella cache git clone https://github.com/user/private_repo e usa il tuo nome utente github.com come nome utente e il token di accesso personale generato per la password.
  4. Rimosso il repository appena clonato e ripetere il test per assicurarsi che i crediti fossero memorizzati nella cache - git clone https://github.com/user/private_repoe questa volta non sono stati richiesti i crediti.

    1. go get funzionerà con tutti i repository a cui il token di accesso personale può accedere. Potrebbe essere necessario ripetere i passaggi con altri account / token poiché le autorizzazioni variano.

1
Ho 2FA e questo ha funzionato per me - ha generato un token (con i priv privati), ha fatto git cloneuno dei miei repository esistenti (è pubblico in realtà), è stato richiesto per il mio username, ha inserito il mio nome utente GitHub, quindi ha inserito token generato per password- cancellato il repository clonato, quindi ripetere il go getcomando e tutto andava bene - grazie! (Anche qui OSX)
Eric Dorsey,

3
Anche questo è davvero fantastico perché puoi limitare l'ambito del token a "leggere" solo per i repository privati, quindi anche se in qualche modo entra in un'immagine allo stato brado, possono solo leggere il tuo codice e non inserire elementi e puoi revoca il token molto facilmente. Non ricordo se hanno ancora la scadenza automatica integrata.
dragon788,

16

Se vuoi solo go getlavorare molto velocemente e andare avanti con il tuo lavoro ...

Esporta e basta GIT_TERMINAL_PROMPT=1

$ export GIT_TERMINAL_PROMPT=1
$ go get [whatever]

Ora ti chiederà un utente / pass per il resto della sessione della shell. Inserisci questo nel tuo .profileo installazione gitcome sopra per una soluzione più permanente.


16

Si lamenta perché deve usare sshinvece di httpsma il tuo git è ancora configurato con HTTPS. quindi, fondamentalmente, come altri precedentemente menzionati, devi abilitare i prompt o configurare git da usare sshinvece di https. un modo semplice per farlo eseguendo quanto segue:

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

o se lo usi già sshcon gitnel tuo computer, puoi tranquillamente modificare ~/.gitconfige aggiungere la seguente riga in fondo

Nota: questo copre tutto SVC, controllo della versione sorgente, che dipende da cosa usi esattamente, github, gitlab, bitbucket)

# Enforce SSH
[url "ssh://git@github.com/"]
  insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
        insteadOf = https://gitlab.com/
[url "ssh://git@bitbucket.org/"]
  insteadOf = https://bitbucket.org/
  • Se si desidera mantenere disabilitate le password, è necessario memorizzare nella cache la password. Per ulteriori informazioni su come memorizzare nella cache la password di github su Mac, Windows o Linux, visitare questa pagina .

  • Per ulteriori informazioni su come aggiungere ssh al tuo account github, visita questa pagina .

Inoltre, cosa ancora più importante, se si tratta di un repository privato per un'azienda o per se stessi, potrebbe essere necessario saltare l'utilizzo del database proxy o checksum per tali repository per evitare di esporli pubblicamente.

Per fare ciò, è necessario impostare GOPRIVATEla variabile di ambiente che controlla quali moduli il comando go considera privati ​​(non disponibili pubblicamente) e NON deve pertanto utilizzare il proxy o il database di checksum.

La variabile è un elenco separato da virgole di pattern (stessa sintassi di Go path.Match) di prefissi di percorso del modulo. Per esempio,

export GOPRIVATE=*.corp.example.com,github.com/mycompany/*

O

go env -w GOPRIVATE=github.com/mycompany/*
  • Per ulteriori informazioni su come risolvere i problemi di convalida del checksum di pacchetti / moduli privati, leggere questo articolo .
  • Per ulteriori informazioni sui moduli go 13 e sui nuovi miglioramenti, consultare le note sulla versione dei moduli Go 1.13 .

Un'ultima cosa da non dimenticare di menzionare, è ancora possibile configurare go getl'autenticazione e il recupero https, tutto ciò che devi fare è aggiungere la seguente riga a$HOME/.netrc

machine github.com login USERNAME password APIKEY

Spero che questo aiuti la comunità e faccia risparmiare tempo agli altri per risolvere rapidamente i problemi descritti. non esitate a lasciare un commento nel caso in cui desideriate più supporto o aiuto.


GOPRIVATE( go env -w GOPRIVATE=github.com/mycompany/*) è l'unica cosa che ha funzionato per me. Potrei suggerire di metterlo sotto la sua stessa voce o anche in una sua risposta per evidenziarlo un po 'di più.
Bernhard Barker il

1

Se configuri gitconfig con questa opzione, in seguito avrai un problema a clonare altri repository di GitHub

git config --global --add url. "Git@github.com". Instead, "https://github.com/"

Invece, ti consiglio di usare questa opzione

echo "export GIT_TERMINAL_PROMPT=1" >> ~/.bashrc || ~/.zshrc

e non dimenticare di generare un token di accesso dal tuo repository privato. Quando viene richiesto di inserire la password, basta incollare il token di accesso. Clone felice :)


0

Ho avuto lo stesso problema su Windows "errore: impossibile eseguire lo script di prompt (codice di uscita 1) fatale: impossibile leggere il nome utente per" https://github.com ": nessun errore" tentativo di accedere a github tramite la finestra di dialogo di accesso. Quando ho annullato la finestra di dialogo, git mi ha chiesto login e password nella riga di comando e ha funzionato bene.

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.