2015-08-26 4 views
45

Ich erstellte die private Repo Beispielseite/MyprivateRepo mit der Github UI von meinem Browser.gehen Ergebnisse in "Terminalaufforderungen deaktiviert" -Fehler für Github private Repo

Dann ging ich zu meinem Go-Verzeichnis (auf dem Desktop) und kloniert:

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

So weit so gut. Die Datei scheduler.go erstellt, zu Repo hinzugefügt und gedrückt.

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

Alles ist OK. Aber wenn ich zu einem sauberen Laptop ging und versuchte, den Repo zu klonen, bekam ich einen Fehler:

# 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 

Warum ist mein Laptop auf meinem eigenen Repo hasst und wie kann ich es sein Schicksal zu akzeptieren? Vielen Dank.

+7

Dies ist kein "go" -Fehler, "git" gibt "Terminal-Eingabeaufforderungen deaktiviert" zurück. Kannst du 'git clone https: // github.com/examplesite/mypriviereepo' auf deinem Laptop ausführen? – JimB

+0

Danke. Der Git Klon funktioniert. Dann geht es los. Was ist das Problem? Muss ich die Pumpe jedes Mal neu starten oder habe ich etwas falsch konfiguriert? – tomcam

+1

@tomcam, Sie können SSH-Schlüssel zu Github-Konto hinzufügen und gehen wird von Anfang an funktionieren, siehe https://help.github.com/articles/generating-ssh-keys/ –

Antwort

48

go get "Terminal-Eingabeaufforderung" standardmäßig deaktiviert. Dies kann geändert werden, indem Sie das env von git setzen:

env GIT_TERMINAL_PROMPT=1 go get xxxx 
+4

wofür steht xxxx? und wo soll ich die ganze Zeile tippen? – nix86

26

1st - go get verweigern die Authentifizierung in der Befehlszeile. Sie müssen also die Anmeldeinformationen in git zwischenspeichern. Weil ich osx benutze, kann ich osxkeychain credential helper verwenden.

2. Für mich habe ich 2FA aktiviert und konnte daher mein Passwort nicht zur Authentifizierung verwenden. Stattdessen musste ich ein persönliches Zugangstoken generieren, das anstelle des Passworts verwendet wurde.

  1. Setup osxkeychain Credential Helfer https://help.github.com/articles/caching-your-github-password-in-git/
  2. Wenn eine persönliche Zugriffstoken https://github.com/settings/tokens
  3. git clone einen privaten Repo es das Passwort git clone https://github.com/user/private_repo und verwendet, um Ihre Github mit TFA anstelle Ihr Passwort zu verwenden, erzeugen nur zu machen zwischenzuspeichern. com Benutzername für den Benutzernamen und das generierte persönliche Zugriffstoken für das Passwort.
  4. Das gerade geklonte Repo entfernt und erneut getestet, um sicherzustellen, dass die Credits zwischengespeichert wurden - git clone https://github.com/user/private_repo und dieses Mal nicht nach Krediten gefragt wurde.

    1. go get funktioniert mit allen Repos, auf die der persönliche Zugriffstoken zugreifen kann. Möglicherweise müssen Sie die Schritte mit anderen Konten/Tokens wiederholen, da die Berechtigungen variieren.
+1

Ich habe 2FA und das funktionierte für mich - generierte ein Token (mit vollem Priv), machte einen 'Git Clone' von einem meiner eigenen Repos (es ist öffentlich), wurde aufgefordert, meinen' Benutzernamen' einzugeben meinen GitHub Benutzernamen, dann das generierte Token für 'password' eingeben - den geklonten Repo löschen, dann den' go get' Befehl wiederholen und alles war gut - danke! (OSX auch hier) –

+2

Das ist auch wirklich toll, weil Sie den Umfang des Tokens beschränken können, nur für private Repos "lesen", also selbst wenn es irgendwie in ein Bild in die Wildnis gelangt, können sie nur Ihren Code lesen und nicht schieben Sie Dinge hinein und Sie können das Token wirklich leicht widerrufen. Ich kann mich nicht erinnern, ob sie noch Auto-Exspiration eingebaut haben. – dragon788

25

Ich fand dies extrem hilfreich, und es löste mein Problem. Wie Mike Graf benutze ich 2FA, aber im Gegensatz zu Mike Graf benutze ich keinen Mac. Mit diesem Befehl können Sie Ihre 2FA seine Sache (und sparen Sie sich die Mühe der Eingabe Ihrer Benutzernamen und Passwort) tun:

git config --global --add url."[email protected]:".insteadOf "https://github.com/"

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

Wenn Sie nicht 2FA verwenden, können Sie benutze immer noch SSH und das wird funktionieren.

Bearbeiten: hinzugefügt die --add Flagge wie von slatunje vorgeschlagen.

+4

Ich empfehle ** ** add ** flag hinzuzufügen, damit Sie vorhandene Einstellungen nicht überschreiben Zum Beispiel: 'git config --global --add url." [email protected]: ". Stattdessen" " https://github.com/ "' – slatunje

+0

Dank slatunje, fügte die Flagge meiner Antwort basierend auf Ihrem Feedback. –

+0

Dies ist die beste Lösung IMO. Es ist sicherer und weniger Aufwand (einmal eingerichtet), SSH-Schlüssel für Authentifizierung anstelle von Benutzername/Passwort zu verwenden – bodecker

1

Wenn Sie nur möchten go get arbeiten wirklich schnell, und bewegen Sie sich mit Ihrer Arbeit ...

exportieren Nur GIT_TERMINAL_PROMPT=1

$ export GIT_TERMINAL_PROMPT=1 
$ go get [whatever] 

Es wird nun Sie für einen Benutzer dazu auffordern,/für den Rest der Shell-Sitzung übergeben. Setzen Sie dies in Ihre .profile oder Setup git wie oben für eine dauerhafte Lösung.