Comment faire "go get" sur une balise spécifique d'un référentiel github


89

J'essaye 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 v0.8.8balise.

J'ai essayé de faire: go get github.com/influxdb/influxdb/releases/tag/v0.8.8mais cela ne dit pas impossible de trouver.

J'ai également essayé de faire un régulier go getde la branche principale, puis de vérifier manuellement l'étiquette à l'aide gitde GOPATH/src/github...in afin de définir la version corret.

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

TL; DR : exécutez go getsur une balise github spécifique et tirez les dépendances correctes.


Essayez ceci .. git tag -a v0.8.8 - "Votre commentaire"
Ashok Londhe

2
@AshokLondhe Il demande comment utiliser une balise go get, pas comment en créer une.
wonderb0lt

@ wonderb0lt c'est une commande pour ajouter une balise.
Ashok Londhe

Je pense que j'ai essayé de découvrir comment vérifier une balise spécifique aussi, et la dernière fois que j'ai essayé, ce n'était pas possible ...
wonderb0lt

1
Jetez un œil à ceci . Vers la fin, les diapositives proposent des alternatives de gestion des dépendances.
wonderb0lt

Réponses:


34

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

Parlé à un gars qui travaille chez Google et il a reconnu ce problème / exigence, il a dit que le fournisseur utilisé par son équipe était volumineux et qu'ils le résoudraient probablement bientôt avec les outils officiels.

Lire la suite:

Vendoring dans Go 1.6

Vendoring a été libéré de l'expérimental dans go 1.6 (après la rédaction initiale de cet article), ce qui facilite le processus d'utilisation de balises / versions spécifiques de packages à l'aide d'outils tiers. go getn'a toujours pas la fonctionnalité pour récupérer des balises ou des versions spécifiques.

En savoir plus sur le fonctionnement de la vente: Comprendre et utiliser le dossier du fournisseur

Modules dans Go 1.11

Go 1.11 a publié des fonctionnalités expérimentales appelées modules pour améliorer la gestion des dépendances, ils espèrent le publier comme stable dans Go 1.12: Informations sur les modules de Go 1.11


1
Pouvez-vous nous en dire un peu plus sur la partie google? Il y a une grande discussion à ce sujet sur la liste de diffusion de la communauté itinérante, y a-t-il une autre direction qui n'a pas été discutée ici?
Not_a_Golfer

1
@Not_a_Golfer C'était un gars qui ne faisait pas partie de l'équipe Go, mais qui a dit qu'ils utilisaient actuellement la vente en interne et que c'était assez volumineux. Ils avaient donc intérêt à mieux le résoudre avec les outils officiels. Pensez que c'était une déclaration non officielle, cela rendra cela plus clair.
Robin Andersson

2
AFAIK, la seule proposition concerne un format de fichier officiel de fournisseur / dépendance. C'est toujours génial, dans la mesure où les projets ne seraient pas liés à un outil de dépendance, et peuvent interagir avec la solution qu'ils veulent (c'est-à-dire que je préfère le verrouillage des révisions, tandis que d'autres préfèrent la vente).
JimB

les modules ne traitent pas vraiment de la dépendance aux compilateurs de code, ce qui nous oblige à utiliser go get protoc-gen-go ailleurs avec la version fixe. Cela nous oblige donc à garder une trace du même contrôle de version à 2 endroits différents (car les bibliothèques sont étroitement couplées avec le générateur)
Martin Kosicky

24

go mod est disponible maintenant.

Pour ceux qui ont besoin de construire un binaire d'une balise spécifique , voici ma manière:

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

Explication:

  • Le code ci-dessus extrait NSQ v1.1.0 et compile nsqd.
  • go mod init .crée un go.modfichier dans le répertoire courant, ce qui permet d'utiliser go getavec révision / balises. (voir ce lien )
  • -d signifie "télécharger uniquement", si vous souhaitez une installation directe, omettez cet indicateur et les commandes de construction sous cette ligne.
  • -v signifie "être verbeux".
  • Le code ci-dessus est pour Windows. Si vous utilisez Linux, remplacez-le bin/nsqd.exepar bin/nsqd.

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


4
Dans go 1.13, il go mod initfaut un identifiant de module, par exemplego mod init local/build
archie

11

J'ai eu du succès avec ceci:

  • Exécutez la commande get sans la balise - elle devrait cloner la branche principale.
  • Accédez au répertoire de clonage et récupérez la balise ou la branche de votre choix.
  • Exécutez à nouveau la commande go get, elle devrait traiter la commande sur la branche extraite.

4
Lors de la première exécution, vous pouvez go get -d <git-url>simplement télécharger les packages et ignorer l'installation.
webwurst

C'est ce qu'il faut utiliser lorsque vous avez besoin d'une balise spécifique, le gopkg.in est trop restrictif.
Hrishikesh Kumar

3

Cette question est antérieure aux modules Go, mais pour référence future, la procédure correcte dans Go 1.11 pour récupérer une version spécifique est la suivante:

go get github.com/influxdb@[version]

Ou pour obtenir une balise git spécifique:

go get github.com/influxdb@[gitref]


1

J'ai une approche (un peu hackish, mais qui fonctionne) pour résoudre ce problème, au moins pour les référentiels git: comme les packages go get'ed sont des référentiels de contrôle de source normaux, on peut extraire les balises en utilisant les outils git normaux (pourrait utiliser git à partir de la ligne de commande , J'utilise Atlassian SourceTree).

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

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

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


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.