Hoe “go get” te doen op een specifieke tag van een github-repository

Ik probeer de InfluxDB-database (versie v0.8.8) te compileren met go get github.com/influxdb/influxdb

Maar dit trekt de master branch, en ik heb de v0.8.8tag nodig.

Ik heb geprobeerd het volgende te doen: go get github.com/influxdb/influxdb/releases/tag/v0.8.8halen, maar dit geeft niet aan dat ik niet kan vinden.

Ik heb ook geprobeerd om een ​​normale go getvan de master branch te doen, en dan handmatig de tag uit te checken met behulp van gitin GOPATH/src/github...om de juiste versie in te stellen.

Het probleem bij het gebruik van de laatste benadering is dat wanneer ik de afhankelijkheden probeer op te halen met go get -u -f ./...het probeert ze te vinden in de master-branch, en sommige van ze bestaan ​​niet op de master-branch…

TL;DR: voer go getuit op een specifieke github-tag en trek de juiste afhankelijkheden.


Antwoord 1, autoriteit 100%

Het is niet mogelijk om de go gettool te gebruiken. In plaats daarvan moet u een tool voor pakketbeheer van derden gebruiken of uw eigen vorken maken voor de pakketten die u fijner wilt beheren.

Ik sprak met een man die bij Google werkt en hij erkende dit probleem/deze vereiste, hij zei dat de leveranciers die zijn team gebruikte omvangrijk waren en dat ze dit waarschijnlijk snel met de officiële tools zullen oplossen.

Lees meer:

Verkoper in Go 1.6

Vendoring is vrijgegeven van experimenteel in go 1.6(nadat dit bericht oorspronkelijk was geschreven) dat maakt het gebruik van specifieke tags/versies van pakketten met tools van derden eenvoudiger. go getheeft nog steeds niet de functionaliteit om specifieke tags of versies op te halen.

Meer over hoe leveranciers werken: De leveranciersmap begrijpen en gebruiken

Modules in Go 1.11

Go 1.11 heeft een experimentele functie, modules genaamd, uitgebracht om het afhankelijkheidsbeheer te verbeteren, ze hopen het als stabiel uit te brengen in Go 1.12: Informatie over modules in Go 1.11


Antwoord 2, autoriteit 86%

go modis nu beschikbaar.

Voor degenen die een binair bestand van een specifieke tag moeten bouwen, dit is mijn manier:

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

Uitleg:

  • De bovenstaande code haalt NSQ v1.1.0 op en bouwt nsqd.
  • go mod init .maakt een go.mod-bestand aan in de huidige map, wat het gebruik van go getmet revisie/tags mogelijk maakt. (zie deze link)
  • -dbetekent “alleen downloaden”, als u een directe installatie wilt, laat u deze vlag en de build-commando’s onder deze regel weg.
  • -vbetekent “uitgebreid zijn”.
  • De bovenstaande code is voor Windows. Als je Linux gebruikt, vervang dan bin/nsqd.exedoor bin/nsqd.

De gedownloade module wordt opgeslagen in %GOPATH%\pkg\mod. Als u uw GOPATH-directory niet wilt vervuilen, maakt u een nieuwe en stelt u uw GOPATHin.


Antwoord 3, autoriteit 43%

Ik heb hiermee succes gehad:

  • Voer het get commando uit zonder de tag – het zou de master branch moeten klonen.
  • Ga naar de kloonmap en check de gewenste tag of branch uit.
  • Voer het go get-commando opnieuw uit, het zou het commando in de uitgecheckte branch moeten verwerken.

Antwoord 4, autoriteit 40%

Deze vraag dateert van vóór Go-modules, maar voor toekomstig gebruik de juiste procedure in Go 1.11 voor het ophalen van een specifieke versie is deze:

go get github.com/influxdb@[version]

Of om een ​​specifieke git-tag te krijgen:

go get github.com/influxdb@[gitref]

Antwoord 5, autoriteit 3%

Ik heb een (enigszins hackachtige, maar werkende) benadering om dit probleem aan te pakken, in ieder geval voor git-repositories: aangezien go get’ed-pakketten normale source control-repositories zijn, kan men tags uitchecken met normale git-tools (zou git kunnen gebruiken vanaf de opdrachtregel gebruik ik Atlassian SourceTree).

Om mijn pakketconfiguratie met mijn teamgenoten te delen, heb ik een git-repository gemaakt van mijn GOPATH. Ik heb toen alle pakketten (tenminste degene die ik op deze manier wilde beheren) aan deze repo toegevoegd als git-submodule. Dit vereist dat je de bestaande repo-mappen opzij zet en ze opnieuw toevoegt als git-submodule, om git niet te verwarren. Dit proces is enigszins vervelend, maar bleek de moeite waard:

Ik kan me nu committen en pushen naar mijn GOPATH-repo elke keer dat ik een nieuw go-pakket gebruik. Wanneer mijn teamgenoten uit deze repo halen en een git-submodule-update uitgeven (of gewoon updaten via SoureTree, die dit automatisch doet), wordt hun versie van het pakket uitgecheckt op dezelfde tag als de mijne.

Dit werkt natuurlijk alleen voor pakketten onder git source control…


Antwoord 6, autoriteit 3%

Volg de onderstaande stappen om de versie van een GO-api bij te werken.

Ik wil bijvoorbeeld de volgende api updaten naar een specifieke tag.

Werkelijke repo: https://github.com/fraugster/parquet-go

Tags: https://github.com/fraugster/parquet-goreleases /tag/v0.5.0

Ga naar je hoofdmap

go get -u https://github.com/fraugster/[email protected]
`


Antwoord 7

maven golang plug-inmaakt het mogelijk om te spelen met branch, tag en revisie tijdens GET, je kunt bekijk de test voor dergelijke cases met GIT-repository

Other episodes