Go get privates Repository: Schritt-für-Schritt-Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Go get privates Repository: Warum ist das für Anfänger eine Qual?



Sie haben ein cooles Go-Paket geschrieben, es in einem privaten Repository auf GitHub hochgeladen und möchten es nun in einem anderen Projekt verwenden. Sie führen go get github.com/yourname/secret-lib aus – und erhalten den Fehler 403 Forbidden oder remote: Repository not found. Kommt Ihnen das bekannt vor?



Diese Situation ist eine der häufigsten Fallen für angehende Go-Entwickler. Die Frage auf Stack Overflow „What's the proper way to 'go get' a private repository?" wurde tausende Male aufgerufen. Das Problem ist, dass go get standardmäßig HTTPS und nicht SSH verwendet und Ihre Anmeldedaten nicht kennt.



In diesem Artikel analysieren wir drei funktionierende Methoden, um go get für private Repositorys einzurichten: über .gitconfig, .netrc und die Umgebungsvariable GOPRIVATE. Sie erfahren, wie Sie Fehler vermeiden und stundenlanges Debuggen sparen.



Warum funktioniert go get nicht mit privaten Repositorys?



Standardmäßig versucht go get, das Modul über HTTPS herunterzuladen. Für öffentliche Repositorys ist das in Ordnung – der anonyme Zugriff funktioniert. Aber private Repositorys erfordern eine Authentifizierung. Go kann nicht automatisch Benutzername/Passwort oder Token einfügen.



Das zweite Problem ist der Mechanismus zur Modulerkennung. Go prüft zunächst, ob das Repository auf GitHub/GitLab/Bitbucket existiert, indem es die HTML-Seite analysiert. Für private Repositorys ist diese Seite ohne Autorisierung nicht zugänglich. Daher der Fehler repository not found, obwohl das Repository existiert.



Methode 1: ~/.gitconfig bearbeiten (am einfachsten)



Der einfachste Weg ist, Git zu zwingen, für eine bestimmte Domain SSH anstelle von HTTPS zu verwenden. Fügen Sie der Datei ~/.gitconfig die folgenden Zeilen hinzu:



[url "git@github.com:"]    insteadOf = https://github.com/


Jede Anfrage an https://github.com/ wird nun automatisch durch SSH ersetzt. Stellen Sie sicher, dass Sie einen SSH-Schlüssel eingerichtet und zu Ihrem GitHub/GitLab-Konto hinzugefügt haben.



Überprüfen:

go get github.com/your-org/private-repo# Funktioniert ohne Fehler!


Wichtig: Diese Methode ändert das Verhalten für alle Repositorys auf GitHub. Wenn Sie es nur für eines benötigen, verwenden Sie eine genauere Einstellung:



[url "git@github.com:your-org/"]    insteadOf = https://github.com/your-org/


Methode 2: .netrc für Token und Passwörter



Wenn Sie HTTPS bevorzugen (z. B. in CI/CD), verwenden Sie die Datei ~/.netrc. Go kann diese Datei lesen und die Anmeldedaten einfügen.



Erstellen Sie die Datei ~/.netrc mit Berechtigungen 600:



machine github.comlogin your-github-usernamepassword your-personal-access-token


Wo bekomme ich das Token? Auf GitHub: Einstellungen → Entwicklereinstellungen → Personal access tokens → Neues Token generieren. Wählen Sie die Berechtigung repo (für private Repositorys).



Danach:

go get github.com/your-org/private-repo


Für GitLab:

machine gitlab.comlogin your-gitlab-usernamepassword your-gitlab-access-token


Diese Methode ist ideal für CI/CD, wo SSH-Schlüssel nicht immer bequem zu speichern sind.



Methode 3: GOPRIVATE – Rettungsanker für Module



Die Umgebungsvariable GOPRIVATE teilt Go mit: „Hey, diese Module sind privat, versuche nicht, sie über den öffentlichen Proxy zu prüfen und gehe nicht auf ihre HTML-Seiten." Dies löst das Problem „repository not found".



Setzen Sie im Terminal (oder tragen Sie es in ~/.bashrc / ~/.zshrc ein):



export GOPRIVATE=github.com/your-org/*


Jetzt wird Go den öffentlichen Modul-Proxy (proxy.golang.org) für alle Repositorys Ihrer Organisation ignorieren. Der Befehl go get wird dann

Blogs

Buchempfehlungen