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.8
tag nodig.
Ik heb geprobeerd het volgende te doen: go get github.com/influxdb/influxdb/releases/tag/v0.8.8
halen, maar dit geeft niet aan dat ik niet kan vinden.
Ik heb ook geprobeerd om een normale go get
van de master branch te doen, en dan handmatig de tag uit te checken met behulp van git
in 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 get
uit op een specifieke github-tag en trek de juiste afhankelijkheden.
Antwoord 1, autoriteit 100%
Het is niet mogelijk om de go get
tool 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:
- Verwijzing naar pakketbeheertools van derden
- Blogbericht van het golang-team over de aanpak voor het implementeren van leveranciers
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 get
heeft 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 mod
is 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 eengo.mod
-bestand aan in de huidige map, wat het gebruik vango get
met revisie/tags mogelijk maakt. (zie deze link)-d
betekent “alleen downloaden”, als u een directe installatie wilt, laat u deze vlag en de build-commando’s onder deze regel weg.-v
betekent “uitgebreid zijn”.- De bovenstaande code is voor Windows. Als je Linux gebruikt, vervang dan
bin/nsqd.exe
doorbin/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 GOPATH
in.
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