it-swarm.com.de

Wie mache ich "get get" für ein bestimmtes Tag eines Github-Repositorys?

Ich versuche, die InfluxDB-Datenbank (Version v0.8.8) mit go get github.com/influxdb/influxdb zu kompilieren.

Aber das zieht den Master-Zweig 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 sagt nicht, dass ich es nicht finden kann.

Ich habe auch versucht, einen normalen go get des Master-Zweigs auszuführen, und dann das Tag manuell mit git in GOPATH/src/github... auschecken, um die Corret-Version festzulegen.

Das Problem beim letzten Ansatz ist, dass ich beim Versuch, die Abhängigkeiten mit go get -u -f ./... zu ziehen, versucht, sie im Hauptzweig zu finden, und einige davon existieren nicht im Hauptzweig ...

TL; DR : Führt go get für ein bestimmtes github-Tag aus und zieht die richtigen Abhängigkeiten heraus.

56
ESala

Das go get-Tool kann nicht verwendet werden. 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 Mann, der bei Google arbeitet, und er erkannte dieses Problem/Anforderung an. Er sagte, dass der Verkauf, den sein Team verwendete, sperrig war und sie wahrscheinlich bald mit den offiziellen Tools gelöst werden.

Weiterlesen:

Vendoring in Go 1.6

Vendoring wurde von experimentell in go 1.6 veröffentlicht (nachdem dieser Beitrag ursprünglich geschrieben wurde), was die Verwendung bestimmter Tags/Versionen von Paketen mit Tools von Drittanbietern vereinfacht. go get verfügt noch nicht über die Funktionalität, bestimmte Tags oder Versionen abzurufen.

Mehr über die Funktionsweise des Verkaufs: Den Lieferantenordner verstehen und verwenden

Module in Go 1.11

Go 1.11 hat eine experimentelle Funktion namens Module zur Verbesserung des Abhängigkeitsmanagements veröffentlicht. Sie hoffen, sie in Go 1.12 als stabil zu veröffentlichen: Informationen zu Modulen in Go 1.11

31
Robin Andersson

Ich hatte Erfolg damit:

  • Führen Sie den get-Befehl ohne das Tag aus - es sollte den Master-Zweig klonen.
  • Wechseln Sie in das Klonverzeichnis und checken Sie den gewünschten Tag oder Zweig aus.
  • Führen Sie den Befehl go get erneut aus. Er sollte den Befehl in der ausgecheckten Verzweigung verarbeiten.
9
Gregory Russell

go mod ist ab sofort verfügbar.

Für diejenigen, die eine Binärdatei eines bestimmten Tags erstellen benötigen, ist hier mein Weg

mkdir temp
cd temp
go mod init .
go get -d -v github.com/nsqio/[email protected]
mkdir bin
go build -o bin/nsqd.exe github.com/nsqio/nsq/apps/nsqd

Erläuterung:

  • Der obige Code ruft NSQ v1.1.0 ab und erstellt nsqd.
  • go mod init . erstellt im aktuellen Verzeichnis eine go.mod-Datei, die die Verwendung von go get mit Revision/Tags ermöglicht. (siehe diesen Link )
  • -d bedeutet "nur Download". Wenn Sie eine direkte Installation wünschen, lassen Sie dieses Flag und die Buildbefehle unter dieser Zeile aus.
  • -v bedeutet "verbose".
  • Der obige Code ist für Windows. Wenn Sie Linux verwenden, ersetzen Sie bin/nsqd.exe durch bin/nsqd.

Das heruntergeladene Modul wird in %GOPATH%\pkg\mod gespeichert. Wenn Sie Ihr GOPATH-Verzeichnis nicht verschmutzen möchten, erstellen Sie ein neues und setzen Sie Ihre GOPATH darauf.

1
brk

Ich habe eine (etwas hackhafte, aber funktionierende) Herangehensweise, um dieses Problem zu lösen, zumindest für Git-Repositories: Da die get'ed-Pakete normale Quellcodeverwaltungs-Repositorys sind, kann man Tags mit normalen Git-Tools auschecken (könnte Git von der Kommandozeile aus verwenden) , Ich verwende Atlassian SourceTree).

Um meine Paketkonfiguration mit meinen Teamkollegen zu teilen, habe ich ein git Repository aus meinem GOPATH erstellt. Ich habe dann alle Pakete (zumindest die Pakete, die ich so verwalten wollte) zu diesem Repo als git-Modul hinzugefügt. Dazu müssen Sie die vorhandenen Repo-Ordner aus dem Weg räumen und sie als git-Submodul erneut hinzufügen, um git nicht zu verwechseln. Dieser Prozess ist etwas mühsam, aber die Mühe hat sich gelohnt:

Ich kann jetzt jedes Mal, wenn ich ein neues Go-Paket verwende, ein Commit ausführen und zu meinem GOPATH-Repo pushen. Wenn meine Teamkollegen aus diesem Repo ziehen und ein Update für das git-Submodul herausgeben (oder einfach über SoureTree aktualisieren, was dies automatisch tut), wird ihre Version des Pakets mit demselben Tag ausgecheckt wie meiner.

Natürlich funktioniert das nur bei Paketen, die der Quellcodeverwaltung von Git unterliegen.

1
Peter Hommel

maven golang plugin erlaubt es, während des GETs mit branch, tag und revision zu spielen. Sie können einen Blick darauf werfen - seinen Test für solche Fälle mit GIT-Repository

0
Igor Maznitsa