Ich versuche, die InfluxDB-Datenbank (Version v0.8.8) mit zu kompilieren go get github.com/influxdb/influxdb
Aber das zieht den Hauptzweig, und ich brauche das v0.8.8
Tag.
Ich habe versucht zu tun: go get github.com/influxdb/influxdb/releases/tag/v0.8.8
aber dies schlägt fehl zu sagen, nicht zu finden.
Ich habe auch versucht, eine reguläre Version go get
des Master-Zweigs zu erstellen und dann das Tag manuell mit git
in GOPATH/src/github...
auszuchecken, um die Corret-Version festzulegen.
Das Problem beim letzten Ansatz ist, dass beim Versuch, die Abhängigkeiten go get -u -f ./...
damit zu ziehen , versucht wird, sie im Hauptzweig zu finden, und einige davon nicht im Hauptzweig vorhanden sind ...
TL; DR : go get
Führen Sie ein bestimmtes Github-Tag aus und ziehen Sie die richtigen Abhängigkeiten.
go get
, nicht wie man eines erstellt.Antworten:
Es ist nicht möglich, das
go get
Tool zu verwenden. Stattdessen müssen Sie ein Go-Paketverwaltungstool eines Drittanbieters verwenden oder eigene Gabeln für die Pakete erstellen, die Sie feinkörniger verwalten möchten.Er sprach mit einem Mitarbeiter von Google und erkannte dieses Problem / diese Anforderung an. Er sagte, das von seinem Team verwendete Vendoring sei sperrig und werde wahrscheinlich bald mit den offiziellen Tools gelöst.
Weiterlesen:
Vendoring in Go 1.6
Vendoring wurde von Experiment in Go 1.6 (nachdem dieser Beitrag ursprünglich geschrieben wurde) freigegeben , wodurch die Verwendung bestimmter Tags / Versionen von Paketen mit Tools von Drittanbietern vereinfacht wird.
go get
verfügt immer noch nicht über die Funktionalität zum Abrufen bestimmter Tags oder Versionen.Weitere Informationen zur Funktionsweise von Vendoring: Verstehen und Verwenden des Vendor-Ordners
Module in Go 1.11
Go 1.11 hat eine experimentelle Funktion namens Module veröffentlicht, um das Abhängigkeitsmanagement zu verbessern. Sie hoffen, sie in Go 1.12 als stabil zu veröffentlichen: Informationen zu Modulen in Go 1.11
quelle
go mod
ist ab sofort verfügbar.Für diejenigen, die eine Binärdatei eines bestimmten Tags erstellen müssen , ist hier mein Weg:
mkdir temp cd temp go mod init . go get -d -v github.com/nsqio/nsq@v1.1.0 mkdir bin go build -o bin/nsqd.exe github.com/nsqio/nsq/apps/nsqd
Erläuterung:
nsqd
.go mod init .
Erstellt einego.mod
Datei im aktuellen Verzeichnis, die die Verwendunggo get
mit Revision / Tags ermöglicht. (siehe diesen Link )-d
bedeutet "nur herunterladen". Wenn Sie eine direkte Installation wünschen, lassen Sie dieses Flag und die Build-Befehle unter dieser Zeile weg.-v
bedeutet "wortreich sein".bin/nsqd.exe
durchbin/nsqd
.Das heruntergeladene Modul wird in gespeichert
%GOPATH%\pkg\mod
. Wenn Sie IhrGOPATH
Verzeichnis nicht verschmutzen möchten, erstellen Sie ein neues und stellen SieGOPATH
es ein.quelle
go mod init
benötigt das eine Modul-ID, zBgo mod init local/build
Ich hatte Erfolg damit:
quelle
go get -d <git-url>
einfach die Pakete herunterladen und die Installation überspringen.Diese Frage ist älter als Go-Module, aber zum späteren Nachschlagen lautet das korrekte Verfahren in Go 1.11 zum Abrufen einer bestimmten Version wie folgt:
go get github.com/influxdb@[version]
Oder um ein bestimmtes Git-Tag zu erhalten:
go get github.com/influxdb@[gitref]
quelle
Ich habe einen (etwas hackigen, aber funktionierenden) Ansatz, um dieses Problem zu lösen, zumindest für Git-Repositorys: Da Go-Get'ed-Pakete normale Quellcodeverwaltungs-Repositorys sind, kann man Tags mit normalen Git-Tools auschecken (könnte Git über die Befehlszeile verwenden , Ich benutze Atlassian SourceTree).
Um meine Paketkonfiguration mit meinen Teamkollegen zu teilen, habe ich aus meinem GOPATH ein Git-Repository erstellt . Ich habe dann alle Pakete (zumindest die, die ich auf diese Weise verwalten wollte) zu diesem Repo als Git-Submodul hinzugefügt. Dies erfordert, dass Sie die vorhandenen Repo-Ordner aus dem Weg räumen und sie erneut als Git-Submodul hinzufügen, um Git nicht zu verwirren. Dieser Prozess ist etwas langwierig, hat sich aber als die Mühe wert erwiesen:
Ich kann jetzt jedes Mal, wenn ich ein neues Go-Paket verwende, ein Commit durchführen und auf mein GOPATH-Repo pushen. Wenn meine Teamkollegen aus diesem Repo aussteigen und ein Git-Submodul-Update herausgeben (oder einfach über SoureTree aktualisieren, was dies automatisch tut), wird ihre Version des Pakets auf demselben Tag wie meines ausgecheckt.
Dies funktioniert natürlich nur für Pakete unter Git-Quellcodeverwaltung ...
quelle
Das Maven Golang Plugin ermöglicht das Spielen mit Branch, Tag und Revision während GET. Sie können sich den Test für solche Fälle mit dem GIT-Repository ansehen
quelle