Je cherche le moyen d'obtenir $ go get
fonctionne 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 savais pas 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 ça marche mais avec .git
extension avec le nom de mon projet, je peux le renommer mais je le fais à chaque fois $ go get
_ n'est pas si bon, y a-t-il un autre moyen?
Vous avez une chose à configurer. L'exemple est basé sur GitHub mais cela ne devrait pas changer le processus:
$ git config --global [email protected]:.insteadOf https://github.com/
$ cat ~/.gitconfig
[url "[email protected]:"]
insteadOf = https://github.com/
$ go get github.com/private/repo
La méthode appropriée consiste à placer manuellement le référentiel au bon endroit. Une fois que le référentiel est là, vous pouvez utiliser go get -u
pour mettre à jour le paquet et go install
pour l'installer. Un paquet nommé
github.com/secmask/awserver-go
entre dans
$GOPATH/src/github.com/secmask/awserver-go
Les commandes que vous tapez sont:
cd $GOPATH/src/github.com/secmask
git clone [email protected]:secmask/awserver-go.git
J'ai eu un problème avec go get
en utilisant un 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 vous pour ajouter un en-tête supplémentaire avec votre jeton privé:
$ git config --global http.extraheader "PRIVATE-TOKEN: YOUR_PRIVATE_TOKEN
Configurez votre git pour convertir les requêtes de ssh en http:
$ git config --global url."[email protected]:".insteadOf "https://gitlab.mycompany.com/"
Enfin, vous pouvez utiliser votre go get
normalement:
$ go get gitlab.com/company/private_repo
Cela ressemble au GitLab numéro 5769 .
Dans GitLab, puisque les dépôts se terminent toujours par
.git
, Je dois préciser.git
à la fin du nom du référentiel pour le faire fonctionner, par exemple:import "example.org/myuser/mygorepo.git"
Et:
$ go get example.org/myuser/mygorepo.git
On dirait que GitHub résout ce problème en ajoutant
".git"
.
Elle est censée être résolue dans “ Ajout de la prise en charge de la récupération du référentiel de Go. # 5958 ”, à condition que le les balises méta de droite soient en place .
Même s'il reste un problème pour Go lui-même: “ cmd/go
: go get ne peut pas découvrir la balise META dans les documents HTML5 ”.
Si vous avez déjà git en utilisant SSH, cette réponse by Ammar Bandukwala est une solution simple:
$ go get
utilise git
en interne. Les liners suivants feront git
et par conséquent $ go get
clonez votre paquet via SSH.
Github:
$ git config --global url."[email protected]:".insteadOf "https://github.com/"
BitBucket:
$ git config --global url."[email protected]:".insteadOf "https://bitbucket.org/"
J'ai créé une ssh-config spécifique à l'utilisateur. Mon utilisateur se connecte automatiquement avec les informations d'identification et la clé appropriées.
J'ai d'abord dû générer une paire de clés
ssh-keygen -t rsa -b 4096 -C "[email protected]"
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. Le mien est donc stocké dans ~/.ssh/id_github_com
.
J'ai ensuite créé (ou modifié) un fichier nommé ~/.ssh/config
avec une entrée:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_github_com
Sur un autre serveur, "ssh-url" est [email protected]:username/private-repo.git
et l'entrée pour ce serveur aurait été:
Host domain.com
HostName domain.com
User admin
IdentityFile ~/.ssh/id_domain_com
Juste pour préciser que vous devez vous assurer que User
, Host
et HostName
sont définis correctement.
Maintenant, je peux simplement parcourir le chemin d'accès, puis go get <package>
, par exemple go get main
où le fichier main/main.go
inclut le package (du dernier exemple ci-dessus) domain.com:username/private-repo.git
.
Générez un github oauth jeton ici et exportez votre jeton github en tant que variable d'environnement:
export GITHUB_TOKEN=123
Configurez git config pour utiliser l’URL d’authentification de base:
git config --global url."https://$GITHUB_TOKEN:[email protected]/".insteadOf "https://github.com/"
Maintenant vous pouvez go get
votre dépôt privé.