web-dev-qa-db-fra.com

Quelle est la bonne façon "d'aller chercher" un dépôt privé?

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?

89
secmask

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
48
JulienD

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
44
fuz

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:

  1. Vous devez obtenir un jeton privé sur:
    https://gitlab.mycompany.com/profile/account

  2. Configurez vous pour ajouter un en-tête supplémentaire avec votre jeton privé:

    $ git config --global http.extraheader "PRIVATE-TOKEN: YOUR_PRIVATE_TOKEN
    
  3. Configurez votre git pour convertir les requêtes de ssh en http:

    $ git config --global url."[email protected]:".insteadOf "https://gitlab.mycompany.com/"
    
  4. Enfin, vous pouvez utiliser votre go get normalement:

    $ go get gitlab.com/company/private_repo
    
28
Rodrigo Oliveira

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 ”.

9
VonC

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/"
6
Robert K. Bell

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.

3
Joachim

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é.

3
Miguel Mota