web-dev-qa-db-fra.com

Comment faire "go get" sur une balise spécifique d'un dépôt github

J'essaie de compiler la base de données InfluxDB (version v0.8.8) en utilisant go get github.com/influxdb/influxdb

Mais cela tire la branche principale, et j'ai besoin de la balise v0.8.8.

J'ai essayé de faire: go get github.com/influxdb/influxdb/releases/tag/v0.8.8 mais cela échoue en disant impossible à trouver.

J'ai également essayé de faire un go get normal de la branche principale, puis d'extraire manuellement la balise en utilisant git dans GOPATH/src/github... afin de définir la version corret.

Le problème avec la dernière approche est que lorsque j'essaie d'extraire les dépendances avec go get -u -f ./..., elles essaient de les trouver dans la branche principale, et certaines d'entre elles n'existent pas dans la branche principale ...

TL; DR : exécute go get sur une balise github spécifique et extrait les dépendances appropriées.

56
ESala

Il n'est pas possible d'utiliser l'outil go get. Au lieu de cela, vous devez utiliser un outil tiers de gestion de paquets ou créer vos propres fourchettes pour les paquets que vous souhaitez gérer plus finement.

A parlé à un gars qui travaille chez Google et il a reconnu ce problème/cette exigence, il a déclaré que la vente utilisée par son équipe était volumineuse et qu’ils le résoudront probablement avec les outils officiels bientôt.

Lire la suite:

Vendoring in Go 1.6

La vente a été sortie d’expérimental dans go 1.6 (après la rédaction de ce message) qui facilite le processus d’utilisation de balises/versions spécifiques de packages en utilisant des outils tiers. go get n'a toujours pas la fonctionnalité permettant d'extraire des balises ou des versions spécifiques.

Pour en savoir plus sur le fonctionnement de la vente: Comprendre et utiliser le dossier du fournisseur } _

Modules in Go 1.11

Go 1.11 a publié une fonctionnalité expérimentale appelée modules pour améliorer la gestion des dépendances, ils espèrent la rendre stable dans Go 1.12: Informations sur les modules dans Go 1.11

31
Robin Andersson

J'ai eu du succès avec ça:

  • Exécutez la commande get sans la balise - elle devrait cloner la branche principale.
  • Accédez au répertoire de clonage et extrayez l'étiquette ou la branche souhaitée.
  • Exécutez à nouveau la commande go get, elle devrait traiter la commande sur la branche extraite.
9
Gregory Russell

go mod est disponible maintenant.

Pour ceux qui ont besoin de construire le binaire d'une balise spécifique, voici ce que je peux faire:

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

Explication:

  • Le code ci-dessus extrait NSQ v1.1.0 et construit nsqd.
  • go mod init . crée un fichier go.mod dans le répertoire en cours, ce qui permet d'utiliser go get avec revision/tags. (voir ce lien )
  • -d signifie "télécharger uniquement". Si vous voulez une installation directe, omettez cet indicateur et les commandes de construction en dessous de cette ligne.
  • -v signifie "être bavard".
  • Le code ci-dessus est pour Windows. Si vous utilisez Linux, remplacez bin/nsqd.exe par bin/nsqd.

Le module téléchargé est stocké dans %GOPATH%\pkg\mod. Si vous ne voulez pas polluer votre répertoire GOPATH, créez-en un nouveau et définissez votre GOPATH sur celui-ci.

1
brk

J'ai une approche (un peu bidon, mais efficace) pour résoudre ce problème, du moins pour les dépôts git: Comme les paquets go get'ed sont des dépôts normaux de contrôle de source, on peut extraire les balises à l'aide des outils git normaux (pourrait utiliser git à partir de la ligne de commande , J'utilise Atlassian SourceTree).

Pour partager la configuration de mon paquet avec mes coéquipiers, j'ai créé un référentiel git à partir de mon GOPATH . J'ai ensuite ajouté tous les paquets (du moins ceux que je voulais gérer de cette façon) à ce dépôt en tant que sous-module git. Cela nécessite de déplacer les dossiers de référentiels existants et de les rajouter en tant que sous-module git, pour ne pas confondre git. Ce processus est un peu fastidieux, mais il en a valu la peine:

Je peux maintenant valider et envoyer à mon compte GOPATH chaque fois que j'utilise un nouveau paquet go. Lorsque mes coéquipiers tirent de ce dépôt et publient une mise à jour de sous-module git (ou simplement via SoureTree, qui le fait automatiquement), leur version du paquet est extraite sur la même étiquette que la mienne.

Bien sûr, cela ne fonctionne que pour les paquets sous contrôle de source git ...

1
Peter Hommel

Le plugin maven golang permet de jouer avec une branche, une balise et une révision pendant GET, vous pouvez jeter un oeil sur son test pour de tels cas avec le dépôt GIT

0
Igor Maznitsa