Je cherche le moyen de $ go get
travailler avec un référentiel privé, après de nombreux essais sur Google.
Le premier essai:
$ go get -v gitlab.com/secmask/awserver-go
Fetching https://gitlab.com/secmask/awserver-go?go-get=1
https fetch failed.
Fetching http://gitlab.com/secmask/awserver-go?go-get=1
Parsing meta tags from http://gitlab.com/secmask/awserver-go?go-get=1 (status code 200)
import "gitlab.com/secmask/awserver-go": parse http://gitlab.com/secmask/awserver-go?go-get=1: no go-import meta tags
package gitlab.com/secmask/awserver-go: unrecognized import path "gitlab.com/secmask/awserver-go
Oui, il n'a pas vu les balises meta car je ne pouvais pas savoir comment fournir les informations de connexion.
Le deuxième essai:
Suivez https://gist.github.com/shurcooL/6927554 . Ajoutez la configuration à .gitconfig.
[url "ssh://[email protected]/"]
insteadOf = https://gitlab.com/
$ go get -v gitlab.com/secmask/awserver-go --> not work
$ go get -v gitlab.com/secmask/awserver-go.git --> work but I got src/gitlab.com/secmask/awserer-go.git
Oui cela fonctionne mais avec l' .git
extension avec le nom de mon projet, je peux le renommer en original mais le faire à chaque fois $ go get
n'est pas si bon, y a-t-il une autre façon?
GOPRIVATE
également. par exempleexport GOPRIVATE="github.com/steelx/that-private-repo"
Réponses:
Vous avez une chose à configurer. L'exemple est basé sur GitHub mais cela ne devrait pas changer le processus:
la source
cat
commande est juste pour vérifier.La bonne façon est de placer manuellement le référentiel au bon endroit. Une fois le référentiel là, vous pouvez utiliser
go get -u
pour mettre à jour le package et l'go install
installer. Un package nomméentre dans
Les commandes que vous tapez sont:
la source
go get
est conçu comme un outil pour le cas courant. L'équipe Go a explicitement décidé de ne pas ajouter de configurabilité afin que les gens adhèrent aux normes au lieu de déployer leur propre cruft. Il n'a jamais été fait pour le cas que vous avez (c'est-à-dire les dépôts privés).J'ai eu un problème avec l'
go get
utilisation du dépôt privé sur gitlab de notre société. J'ai perdu quelques minutes à essayer de trouver une solution. Et j'ai trouvé celui-ci:Vous devez obtenir un jeton privé sur:
https://gitlab.mycompany.com/profile/account
Configurez votre git pour ajouter un en-tête supplémentaire avec votre jeton privé:
Configurez votre git pour convertir les requêtes de http en ssh :
Enfin, vous pouvez utiliser votre
go get
normalement:la source
http.extraheader
. +1--global
également votre jeton privé à un autre serveur git au cas où vous utiliseriez de nombreux repo? un risque sécurisé?Tout ce qui précède n'a pas fonctionné pour moi. Le clonage du dépôt fonctionnait correctement mais j'obtenais toujours une
unrecognized import
erreur.En ce qui concerne Go v1.13, j'ai trouvé dans la doc que nous devrions utiliser la variable env GOPRIVATE comme suit :
la source
Si vous avez déjà git en utilisant SSH, cette réponse d' Ammar Bandukwala est une solution de contournement simple:
$ go get
utilise engit
interne. Les doublures suivantes vont créergit
et par conséquent$ go get
cloner votre paquet via SSH.Github:
BitBucket:
la source
Cela ressemble au problème GitLab 5769 .
Il est censé être résolu dans « Ajout de la prise en charge de la récupération du référentiel de Go. # 5958 ”, à condition que les bonnes balises Meta soient en place .
Bien qu'il y ait toujours un problème pour Go lui-même: «
cmd/go
: go get ne peut pas découvrir la balise meta dans les documents HTML5 ».la source
go get
peut voir les balises méta sans connexion)go get
commande ressemblera àgo get gitlab.com/secmask/awserver-go.git.git
(demandera l'authentification de base http), qui ne semblent pas bonnes aussi.Générez un jeton github oauth ici et exportez votre jeton github en tant que variable d'environnement:
Définissez git config pour utiliser l'url d'authentification de base:
Maintenant, vous pouvez
go get
votre repo privé.la source
J'ai créé un ssh-config spécifique à l'utilisateur, de sorte que mon utilisateur se connecte automatiquement avec les informations d'identification et la clé correctes.
J'avais d'abord besoin de générer une paire de clés
et l'a enregistré par exemple
~/.ssh/id_my_domain
. Notez qu'il s'agit également de la paire de clés (privée et publique) que j'ai connectée à mon compte Github, donc la mienne est stockée dans~/.ssh/id_github_com
.J'ai ensuite créé (ou modifié) un fichier appelé
~/.ssh/config
avec une entrée:Sur un autre serveur, le "ssh-url" est
[email protected]:username/private-repo.git
et l'entrée pour ce serveur aurait été:Juste pour préciser que vous devez vous assurer que le
User
,Host
etHostName
est correctement défini.Maintenant, je peux simplement naviguer dans le chemin aller et ensuite
go get <package>
, par exemplego get main
où le fichiermain/main.go
comprend le package (du dernier exemple ci-dessus)domain.com:username/private-repo.git
.la source
go get hostname.com/username/repo.git
(l'extension .git est cruciale)..git
et pourquoi cela se produit-il?.git
extension c'était que sur ma configuration git localegit config --global url."[email protected]:".insteadOf "https://gitlab.myserver.com/"
, mais le sousgitlab.myserver.com
- domaine n'a pas la certification ssl, donc j'utilise à lahttp
place dehttps
, maintenantJe suis tombé sur
.netrc
et j'ai trouvé cela pertinent à ce sujet.Créez un fichier
~/.netrc
avec le contenu suivant:Terminé!
De plus, pour les dernières versions de GO, vous devrez peut-être l'ajouter aux variables d'environnement
GOPRIVATE=github.com
(je l'ai ajouté à mon.zshrc
)netrc
améliore également la configuration de mon environnement de développement car mon accès github personnel pour HTTPS est maintenant configuré pour être utilisé sur toute la machine (tout comme ma configuration SSH).Générez des jetons d'accès personnels GitHub: https://github.com/settings/tokens
Si vous souhaitez vous en tenir à l'authentification SSH, masquez la demande d'utiliser ssh avec force
git config --global url."[email protected]:".insteadOf "https://github.com/"
Plus de méthodes pour configurer l'accès git: https://gist.github.com/technoweenie/1072829#gistcomment-2979908
Voir la page de manuel et cette réponse pour son utilisation avec Git sous Windows en particulier
la source
Pour moi, les solutions proposées par d'autres donnaient encore l'erreur suivante pendant
go get
Ce qu'exigeait cette solution
Comme indiqué par d'autres:
git config --global url."[email protected]:".insteadOf "https://github.com/"
Suppression de la phrase de passe de ma
./ssh/id_rsa
clé qui a été utilisée pour authentifier la connexion au référentiel. Cela peut être fait en entrant un mot de passe vide lorsque vous y êtes invité en réponse à:ssh-keygen -p
Pourquoi cela fonctionne
Ce n'est pas une jolie solution de contournement car il est toujours préférable d'avoir une phrase de passe sur votre clé privée, mais cela causait des problèmes quelque part dans OpenSSH.
go get
utilise en interne git, qui utilise openssh pour ouvrir la connexion. OpenSSH prend les certificats nécessaires pour l'authentification de.ssh/id_rsa
. Lors de l'exécution de commandes git à partir de la ligne de commande, un agent peut se charger d'ouvrir le fichier id_rsa pour vous afin que vous n'ayez pas à spécifier la phrase de passe à chaque fois, mais lorsqu'il est exécuté dans le ventre de go get, cela n'a pas fonctionné dans mon Cas. OpenSSH veut alors vous demander un mot de passe mais comme ce n'est pas possible en raison de la façon dont il a été appelé, il imprime dans son journal de débogage:Et échoue tout simplement. Si vous supprimez la phrase de passe du fichier de clé, OpenSSH accédera à votre clé sans cette invite et cela fonctionnera
Cela peut être dû au fait que Go récupère des modules simultanément et ouvre plusieurs connexions SSH à Github en même temps (comme décrit dans cet article ). Ceci est quelque peu soutenu par le fait que le journal de débogage d'OpenSSH a montré que la connexion initiale au référentiel a réussi, mais l'a réessayé plus tard pour une raison quelconque et cette fois a choisi de demander une phrase de passe.
Cependant, la solution d'utiliser le multiplexage de connexion SSH telle que proposée dans l'article mentionné ne fonctionnait pas pour moi. Pour mémoire, l'auteur a suggéré d'ajouter la configuration de collowing au fichier de configuration ssh pour l'hôte concerné:
Mais comme indiqué, pour moi cela n'a pas fonctionné, peut-être que je l'ai mal fait
la source