Holen Sie sich die Ergebnisse im Fehler "Terminal-Eingabeaufforderungen deaktiviert" für Github Private Repo

187

Ich habe die private Repo-Beispielseite / myprivaterepo mithilfe der Github-Benutzeroberfläche in meinem Browser erstellt.

Dann ging ich zu meinem go-Verzeichnis (auf dem Desktop) und klonte es:

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

So weit, ist es gut. Erstellt die Datei scheduler.go, wird zum Repo hinzugefügt und gepusht.

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

Alles ist in Ordnung. Aber als ich zu einem sauberen Laptop ging und versuchte, das Repo zu klonen, bekam ich eine Fehlermeldung:

# 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 hasst mein Laptop mein eigenes Repo und wie kann ich ihn dazu bringen, sein Schicksal zu akzeptieren? Vielen Dank.

Tomcam
quelle
10
Dies ist kein goFehler, sondern gitgibt "Terminal-Eingabeaufforderungen deaktiviert" zurück. Können Sie git clone https://github.com/examplesite/myprivaterepoauf Ihrem Laptop laufen ?
JimB
1
Danke dir. Der Git-Klon hat funktioniert. Dann geht es los. Was ist das Problem? Muss ich die Pumpe jedes Mal so "ansaugen" oder habe ich etwas falsch konfiguriert?
Tomcam
1
@tomcam, können Sie SSH - Schlüssel auf Github - Konto hinzufügen und gehen get von Anfang an funktionieren, siehe help.github.com/articles/generating-ssh-keys
alex vasi
@alexvasi: Das funktioniert nur, wenn er das Repo zuerst selbst über ssh klont, da es anfordert, https://github.com/ob der Importpfad nicht existiert. Der Git-Prozess sollte in der Lage sein, nach dem Benutzernamen / Passwort zu fragen, daher muss in der Laptop-Konfiguration etwas anderes vorhanden sein - eine andere Shell, eine andere .gitconfig, eine env-Variable usw.
JimB
All dies hat mir geholfen, aber ich bin mir nicht sicher, wie ich es als beantwortet und / oder gelöst markieren soll. Folgendes habe ich bisher.
Tomcam

Antworten:

172

go get deaktiviert standardmäßig die "Terminal-Eingabeaufforderung". Dies kann durch Festlegen einer Umgebungsvariablen von git geändert werden:

env GIT_TERMINAL_PROMPT=1 go get github.com/examplesite/myprivaterepo
Shafreeck Meer
quelle
304

Ich fand das sehr hilfreich und es löste mein Problem. Dieser Befehl ermöglicht es Ihrem 2FA, seine Aufgabe zu erledigen (und erspart Ihnen die Eingabe Ihres Benutzernamens und Passworts):

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 2FA nicht verwenden, können Sie weiterhin SSH verwenden, und dies funktioniert.

Bearbeiten: fügte die --addFlagge hinzu, wie von slatunje vorgeschlagen .

Wylliam Judd
quelle
12
Ich empfehle, das Flag --add hinzuzufügen, damit Sie vorhandene Einstellungen nicht überschreiben. Beispiel:git config --global --add url."[email protected]:".insteadOf "https://github.com/"
slatunje
Danke slatunje, habe die Flagge zu meiner Antwort hinzugefügt, basierend auf deinem Feedback.
Wylliam Judd
5
Dies ist die beste Lösung IMO. Es ist sicherer und weniger Aufwand (einmal eingerichtet), SSH-Schlüssel für die Authentifizierung anstelle von Benutzername / Passwort zu verwenden
Bodecker
1
Tun Sie dies nicht unter Windows. Am Ende hatte ich einen Fehler [email protected]: Permission denied (publickey). fatal: Could not read from remote repository..
Shital Shah
1
funktioniert auch für Linux. sollte für alle funktionieren, wenn Sie ssh global verwenden
Chiptus
38

1. - go getverweigert die Authentifizierung in der Befehlszeile. Sie müssen also die Anmeldeinformationen in git zwischenspeichern. Da ich osx verwende, kann ich den osxkeychain-Helfer für Anmeldeinformationen verwenden.

2. Für mich habe ich 2FA aktiviert und konnte daher mein Passwort nicht zur Authentifizierung verwenden. Stattdessen musste ich ein persönliches Zugriffstoken generieren, um es anstelle des Passworts zu verwenden.

  1. Richten Sie den osxkeychain-Helfer für Anmeldeinformationen ein: https://help.github.com/articles/caching-your-github-password-in-git/
  2. Wenn Sie TFA anstelle Ihres Kennworts verwenden, generieren Sie ein persönliches Zugriffstoken mit dem Repo-Bereich https://github.com/settings/tokens
  3. git klont ein privates Repo, um das Passwort zwischenzuspeichern, git clone https://github.com/user/private_repo und verwendet Ihren github.com-Benutzernamen als Benutzernamen und das generierte persönliche Zugriffstoken als Passwort.
  4. Das gerade geklonte Repo wurde entfernt und erneut getestet, um sicherzustellen, dass Creds zwischengespeichert wurden - git clone https://github.com/user/private_repound diesmal wurde nicht nach Creds gefragt.

    1. go get funktioniert mit allen Repos, auf die das persönliche Zugriffstoken zugreifen kann. Möglicherweise müssen Sie die Schritte mit anderen Konten / Token wiederholen, da die Berechtigungen variieren.
Mike Graf
quelle
1
Ich habe 2FA und dies hat für mich funktioniert - ein Token (mit vollen Berechtigungen) generiert, git cloneeines meiner eigenen vorhandenen Repos erstellt (es ist tatsächlich öffentlich), wurde zu meinem aufgefordert username, meinen GitHub-Benutzernamen eingegeben und dann das eingegeben Token generiert für password- das geklonte Repo gelöscht, dann den go getBefehl erneut ausgeführt und alles war gut - danke! (OSX auch hier)
Eric Dorsey
3
Dies ist auch sehr gut, da Sie den Umfang des Tokens so beschränken können, dass es nur für private Repos "gelesen" wird. Selbst wenn es irgendwie in ein Bild in freier Wildbahn gelangt, können sie nur Ihren Code lesen und keine Dinge hineinschieben, und Sie können Widerrufen Sie den Token ganz einfach. Ich kann mich nicht erinnern, ob sie bereits einen automatischen Ablauf haben.
dragon788
16

Wenn Sie nur sehr go getschnell arbeiten und Ihre Arbeit fortsetzen möchten ...

Einfach exportieren GIT_TERMINAL_PROMPT=1

$ export GIT_TERMINAL_PROMPT=1
$ go get [whatever]

Sie werden nun aufgefordert, einen Benutzer / Pass für den Rest Ihrer Shell-Sitzung einzugeben. Fügen Sie dies wie oben beschrieben in Ihr .profileoder Setup ein, gitum eine dauerhaftere Lösung zu erhalten.

EdH
quelle
14

Es beschwert sich, weil es sshanstelle von verwendet werden muss, httpsaber Ihr Git ist immer noch mit https konfiguriert. Grundsätzlich müssen Sie, wie bereits erwähnt, entweder Eingabeaufforderungen aktivieren oder git für die Verwendung sshanstelle von konfigurieren https. Eine einfache Möglichkeit, dies zu tun, indem Sie Folgendes ausführen:

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

oder wenn Sie bereits sshmit gitin Ihrem Computer verwenden, können Sie ~/.gitconfigdie folgende Zeile ganz unten sicher bearbeiten und hinzufügen

Hinweis: Dies umfasst alle SVC- und Quellversionskontrollen, die davon abhängen, was Sie genau verwenden (Github, Gitlab, Bitbucket).

# Enforce SSH
[url "ssh://[email protected]/"]
  insteadOf = https://github.com/
[url "ssh://[email protected]/"]
        insteadOf = https://gitlab.com/
[url "ssh://[email protected]/"]
  insteadOf = https://bitbucket.org/
  • Wenn Sie Kennwort-Pompts deaktiviert lassen möchten, müssen Sie das Kennwort zwischenspeichern. Weitere Informationen zum Zwischenspeichern Ihres Github-Passworts unter Mac, Windows oder Linux finden Sie auf dieser Seite .

  • Weitere Informationen zum Hinzufügen von ssh zu Ihrem Github-Konto finden Sie auf dieser Seite .

Noch wichtiger ist, dass Sie, wenn dies ein privates Repository für ein Unternehmen oder für sich selbst ist, möglicherweise die Verwendung der Proxy- oder Prüfsummen-Datenbank für solche Repos überspringen müssen, um zu vermeiden, dass sie öffentlich zugänglich gemacht werden.

Dazu müssen Sie eine GOPRIVATEUmgebungsvariable festlegen , die steuert, welche Module der Befehl go als privat betrachtet (nicht öffentlich verfügbar) und daher NICHT die Proxy- oder Prüfsummen-Datenbank verwenden sollte.

Die Variable ist eine durch Kommas getrennte Liste von Mustern (gleiche Syntax von Go's path.Match) von Modulpfadpräfixen. Beispielsweise,

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

Oder

go env -w GOPRIVATE=github.com/mycompany/*
  • Weitere Informationen zum Lösen von Problemen mit der Prüfsummenvalidierung für private Pakete / Module finden Sie in diesem Artikel .
  • Weitere Informationen zu Go 13-Modulen und neuen Verbesserungen finden Sie in den Versionshinweisen zu Go 1.13-Modulen .

Eine letzte Sache, die Sie nicht vergessen sollten zu erwähnen, Sie können immer noch konfigurieren, um sich go getzu authentifizieren und abzurufen https. Alles, was Sie tun müssen, ist, die folgende Zeile hinzuzufügen$HOME/.netrc

machine github.com login USERNAME password APIKEY

Ich hoffe, dies hilft der Community und spart anderen Zeit, um die beschriebenen Probleme schnell zu lösen. Bitte hinterlassen Sie einen Kommentar, falls Sie weitere Unterstützung oder Hilfe wünschen.

Muhammad Soliman
quelle
GOPRIVATE( go env -w GOPRIVATE=github.com/mycompany/*) ist das einzige, was für mich funktioniert hat. Ich könnte vorschlagen, dies unter eine eigene Überschrift oder sogar in eine eigene Antwort zu setzen, um es ein bisschen mehr hervorzuheben.
Bernhard Barker
1

Wenn Sie Ihre gitconfig mit dieser Option konfigurieren, haben Sie später ein Problem beim Klonen anderer Repos von GitHub

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

Stattdessen empfehle ich Ihnen, diese Option zu verwenden

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

und vergessen Sie nicht, ein Zugriffstoken aus Ihrem privaten Repository zu generieren. Wenn Sie zur Eingabe Ihres Passworts aufgefordert werden, fügen Sie einfach das Zugriffstoken ein. Glücklicher Klon :)

cooljl86
quelle
0

Ich hatte das gleiche Problem unter Windows. "Fehler: Fehler beim Ausführen des Eingabeaufforderungsskripts (Exit-Code 1). Schwerwiegend: Benutzername für ' https://github.com ' konnte nicht gelesen werden. Kein Fehler." Beim Versuch, mich über den Anmeldedialog bei Github anzumelden. Als ich den Dialog abbrach, fragte mich Git in der Kommandozeile nach Login und Passwort und es funktionierte einwandfrei.

Nick Proto
quelle