Ich suche nach dem Weg, um $ go get
Arbeit mit privatem Repository zu bekommen , nach vielen Google-Versuchen.
Der erste Versuch:
$ go get -v gitlab.com/secmask/awserver-go
Fetching https://gitlab.com/secmask/awserver-go?go-get=1
https fetch failed.
Fetching http://gitlab.com/secmask/awserver-go?go-get=1
Parsing meta tags from http://gitlab.com/secmask/awserver-go?go-get=1 (status code 200)
import "gitlab.com/secmask/awserver-go": parse http://gitlab.com/secmask/awserver-go?go-get=1: no go-import meta tags
package gitlab.com/secmask/awserver-go: unrecognized import path "gitlab.com/secmask/awserver-go
Ja, die Meta-Tags wurden nicht angezeigt, da ich nicht wissen konnte, wie Anmeldeinformationen bereitgestellt werden sollen.
Der zweite Versuch:
Folgen Sie https://gist.github.com/shurcooL/6927554 . Fügen Sie config zu .gitconfig hinzu.
[url "ssh://[email protected]/"]
insteadOf = https://gitlab.com/
$ go get -v gitlab.com/secmask/awserver-go --> not work
$ go get -v gitlab.com/secmask/awserver-go.git --> work but I got src/gitlab.com/secmask/awserer-go.git
Ja, es funktioniert, aber mit der .git
Erweiterung mit meinem Projektnamen kann ich es in Original umbenennen, aber jedes Mal, wenn es $ go get
nicht so gut ist, gibt es eine andere Möglichkeit?
GOPRIVATE
. zBexport GOPRIVATE="github.com/steelx/that-private-repo"
Antworten:
Sie müssen eine Sache konfigurieren. Das Beispiel basiert auf GitHub, dies sollte jedoch den Prozess nicht ändern:
quelle
cat
Befehl ist nur zur Überprüfung.Der richtige Weg ist, das Repository manuell an der richtigen Stelle zu platzieren. Sobald das Repository vorhanden ist, können Sie
go get -u
das Paket aktualisieren undgo install
installieren. Ein Paket mit dem Namengehört in
Die Befehle, die Sie eingeben, sind:
quelle
go get
wurde als Tool für den allgemeinen Fall entwickelt. Das Go-Team hat sich ausdrücklich gegen das Hinzufügen von Konfigurierbarkeit entschieden, damit die Benutzer die Standards einhalten, anstatt ihre eigene Cruft auszurollen. Es wurde nie für den Fall gemacht, den Sie haben (dh private Repositories).Ich hatte ein Problem mit der
go get
Verwendung des privaten Repositorys auf Gitlab unserer Firma. Ich habe ein paar Minuten verloren, um eine Lösung zu finden. Und ich habe diesen gefunden:Sie benötigen ein privates Token unter:
https://gitlab.mycompany.com/profile/account
Konfigurieren Sie git so, dass mit Ihrem privaten Token ein zusätzlicher Header hinzugefügt wird:
Konfigurieren Sie Ihr Git so, dass Anforderungen von http nach ssh konvertiert werden :
Endlich können Sie Ihre
go get
normalen verwenden:quelle
http.extraheader
. +1--global
Ihr privates Token auch an einen anderen Git-Server gesendet, falls Sie viele Repos verwenden? ein sicheres Risiko?All das hat bei mir nicht funktioniert. Das Klonen des Repos funktionierte korrekt, aber ich bekam immer noch einen
unrecognized import
Fehler.Da es für Go v1.13 steht, habe ich im Dokument festgestellt, dass wir die GOPRIVATE env-Variable wie folgt verwenden sollten :
quelle
Wenn Sie bereits SSH verwenden, ist diese Antwort von Ammar Bandukwala eine einfache Problemumgehung :
$ go get
verwendetgit
intern. Die folgenden Einzeiler erstellengit
und$ go get
klonen Ihr Paket über SSH.Github:
Bit Bucket:
quelle
Das sieht aus wie das GitLab-Problem 5769 .
Es soll unter „ Unterstützung für das Abrufen des Go-Repositorys hinzugefügt “ behoben werden. # 5958 ”, vorausgesetzt, die richtigen Meta-Tags sind vorhanden .
Obwohl es für Go selbst immer noch ein Problem gibt: "
cmd/go
: go get kann kein Meta-Tag in HTML5-Dokumenten erkennen ".quelle
go get
Meta-Tags ohne Logingo get
Befehl sieht so ausgo get gitlab.com/secmask/awserver-go.git.git
(fragt nach der http-Basisauthentifizierung), was auch nicht gut aussieht.Generieren Sie ein Github OAuth - Token hier und exportieren Sie Ihre GitHub als Umgebungsvariable Token:
Stellen Sie git config so ein, dass die grundlegende Auth-URL verwendet wird:
Jetzt können Sie
go get
Ihr privates Repo.quelle
Ich habe eine benutzerspezifische ssh-config erstellt, sodass sich mein Benutzer automatisch mit den richtigen Anmeldeinformationen und dem richtigen Schlüssel anmeldet.
Zuerst musste ich ein Schlüsselpaar generieren
und speicherte es zB
~/.ssh/id_my_domain
. Beachten Sie, dass dies auch das Schlüsselpaar (privat und öffentlich) ist, das ich mit meinem Github-Konto verbunden habe, sodass mein Konto in gespeichert ist~/.ssh/id_github_com
.Ich habe dann eine Datei
~/.ssh/config
mit einem Eintrag erstellt (oder geändert) :Auf einem anderen Server lautet die "ssh-url"
[email protected]:username/private-repo.git
und der Eintrag für diesen Server wäre gewesen:Nur um zu verdeutlichen, dass Sie sicherstellen müssen, dass das
User
,Host
undHostName
richtig eingestellt ist.Jetzt kann ich einfach in den Go-Pfad navigieren und dann
go get <package>
, z. B.go get main
wo die Dateimain/main.go
das Paket enthält (aus dem letzten Beispiel oben)domain.com:username/private-repo.git
.quelle
go get hostname.com/username/repo.git
(Die Erweiterung .git ist entscheidend)..git
und warum passiert es?.git
Erweiterung war es , dass auf meinem lokalen git Konfigurationgit config --global url."[email protected]:".insteadOf "https://gitlab.myserver.com/"
, aber die Sub - Domaingitlab.myserver.com
nicht die ssl - Zertifizierung hat, so dass ichhttp
statthttps
, jetztIch bin darauf gestoßen
.netrc
und fand es relevant dafür.Erstellen Sie eine Datei
~/.netrc
mit folgendem Inhalt:Getan!
Für die neuesten GO-Versionen müssen Sie dies möglicherweise zu den Umgebungsvariablen hinzufügen
GOPRIVATE=github.com
(ich habe es zu meinen hinzugefügt.zshrc
).netrc
Außerdem wird die Einrichtung meiner Entwicklungsumgebung verbessert, da mein persönlicher Github-Zugriff für HTTPS jetzt so konfiguriert ist, dass er auf dem gesamten Computer verwendet werden kann (genau wie meine SSH-Konfiguration).Generieren Sie GitHub-Token für den persönlichen Zugriff: https://github.com/settings/tokens
Wenn Sie bei der SSH-Authentifizierung bleiben möchten, maskieren Sie die Anforderung, ssh zwangsweise zu verwenden
git config --global url."[email protected]:".insteadOf "https://github.com/"
Weitere Methoden zum Einrichten des Git-Zugriffs: https://gist.github.com/technoweenie/1072829#gistcomment-2979908
Weitere Informationen zur Verwendung mit Git unter Windows finden Sie in der Manpage und in dieser Antwort
quelle
Für mich haben die von anderen angebotenen Lösungen immer noch den folgenden Fehler ergeben
go get
Was diese Lösung erforderte
Wie von anderen angegeben:
git config --global url."[email protected]:".insteadOf "https://github.com/"
Entfernen der Passphrase aus meinem
./ssh/id_rsa
Schlüssel, der zur Authentifizierung der Verbindung zum Repository verwendet wurde. Dies kann durch Eingabe eines leeren Passworts erfolgen, wenn Sie als Antwort auf Folgendes aufgefordert werden:ssh-keygen -p
Warum das funktioniert
Dies ist keine schöne Problemumgehung, da es immer besser ist, eine Passphrase für Ihren privaten Schlüssel zu haben, aber es hat irgendwo in OpenSSH Probleme verursacht.
go get
verwendet intern git, das openssh verwendet, um die Verbindung zu öffnen. OpenSSH übernimmt die für die Authentifizierung erforderlichen Zertifikate von.ssh/id_rsa
. Wenn Sie git-Befehle über die Befehlszeile ausführen, kann ein Agent dafür sorgen, dass die Datei id_rsa für Sie geöffnet wird, damit Sie nicht jedes Mal die Passphrase angeben müssen Fall. OpenSSH möchte Sie dann zur Eingabe eines Kennworts auffordern. Da dies jedoch aufgrund des Aufrufs nicht möglich ist, wird es in das Debug-Protokoll gedruckt:Und scheitert einfach. Wenn Sie die Passphrase aus der Schlüsseldatei entfernen, gelangt OpenSSH ohne diese Eingabeaufforderung zu Ihrem Schlüssel und es funktioniert
Dies kann dadurch verursacht werden, dass Go gleichzeitig Module abruft und mehrere SSH-Verbindungen zu Github gleichzeitig öffnet (wie in diesem Artikel beschrieben ). Dies wird etwas durch die Tatsache unterstützt, dass das OpenSSH-Debug-Protokoll die anfängliche Verbindung zum Repository als erfolgreich anzeigte, es aber später aus irgendeinem Grund erneut versuchte und diesmal nach einer Passphrase fragte.
Die im genannten Artikel beschriebene Lösung der Verwendung von SSH-Verbindungsmultiplexing hat bei mir jedoch nicht funktioniert. Für die Aufzeichnung schlug der Autor vor, die folgende Konfektion zur SSH-Konfigurationsdatei für den betroffenen Host hinzuzufügen:
Aber wie gesagt, für mich hat es nicht funktioniert, vielleicht habe ich es falsch gemacht
quelle