0
votes

Bonne façon d'obtenir des dépendances à partir d'un référentiel privé

J'ai un bitbucket privé sur http://localhost:7990 ðŸ '‰ 🠻 lien de clonage http://localhost:7990/scm/gom/bar.git

go.mod ressemble à:

$GOPATH
└── go
     └── pkg
         └── mod
             └── cache
                 └── download
                     └── mod.org
                         └── bar.git
                             └── @v
                                 ├── v1.0.0.info
                                 ├── v1.0.0.lock
                                 └── v1.0.0.zip.tmp882433775

Références disponibles dans un référentiel distant:

go get -v mod.org/bar.git 

go: finding lmod.org/bar.git v1.0.0
go: downloading lmod.org/bar.git v1.0.0
verifying lmod.org/bar.git@v1.0.0: lmod.org/bar.git@v1.0.0: reading https://sum.golang.org/lookup/lmod.org/bar.git@v1.0.0: 410 Gone

J'ai changé .gitconfig en

go get -v mod.org/bar

go get lmod.org/bar: unrecognized import path "lmod.org/bar" (https fetch: Get https://lmod.org/bar?go-get=1: dial tcp: lookup lmod.org: no such host)

et essayé d'obtenir le module par name , n'obtenez no such host erreur d' no such host :

[url "http://localhost:7990/scm/gom"]
      insteadOf = https://mod.org

Quand j'ajoute l'extension .git

git ls-remote  http://localhost:7990/scm/gom/bar.git 

From http://localhost:7990/scm/gom/bar.git
d456de4f12785b26ac27ba08cffb76687d1287c8        HEAD
d456de4f12785b26ac27ba08cffb76687d1287c8        refs/heads/master
f948bd47a22c5fb9abed5bff468a10fc24f67483        refs/tags/v1.0.0

go télécharger la version avec la balise v1.0.0 à GOPATH = /Users/user/go" :

module mod.org/bar

go 1.13

, mais je ne peux toujours pas en utiliser une comme dépendance dans un autre projet go.


5 commentaires

Pourquoi ne pas utiliser les directives de remplacement dans votre go.mod?


Pourquoi ne pas simplement mettre le code des dépendances dans $ GOPATH / src?


@Markus W Mahlberg - J'essaie d'utiliser le bitbucket local de bitbucket comme détenteur de dépendances auto (privées). J'utilise également des go modules pour automatiser le processus d'obtention et de gestion des versions des dépendances publiques / privées.


@Volker - Je voudrais travailler avec le repo privé est public, mais replace fait du bruit dans la configuration. Pour toutes mes dépendances privées, je dois écrire replace lmod.org/xxx => lmod.org/xxx.git v1.0.0


Votre bitbucket local a un nom d'hôte. Ainsi, votre chemin d'importation serait your.host.name/owner/repo . Et vous pouvez utiliser le même chemin dans votre $GOPATH


3 Réponses :


3
votes

Le serveur pour https://mod.org/bar doit renvoyer go-import métadonnées go-import suivant le protocole décrit dans https://golang.org/cmd/go/#hdr-Remote_import_paths .

Plusieurs implémentations open source existent, telles que:

Vous pouvez stocker les informations d'identification (ou les jetons d'accès) pour le serveur HTTPS et le référentiel sous-jacent dans un fichier .netrc , et utiliser la variable d'environnement GOPRIVATE pour indiquer à la commande go ne pas rechercher votre dépôt privé dans le proxy public.


0 commentaires

0
votes

Étapes pour résoudre le problème:

1ï¸ âƒ £ a changé la déclaration du module dans go.mod en

go get -u mod.org/gom/bar.git
go get mod.org/gom/bar.git@v1.0.0-beta.1

la même que la structure des référentiels bitbucket

entrez la description de l'image ici

références de repo au clonage:

module mod.org/gom/foo

go 1.13

require (
   mod.org/gom/bar v1.0.0-beta.1
)

replace (
   mod.org/gom/bar => mod.org/gom/bar.git v1.0.0-beta.1
) 

2 - changer .gitconfig : ajouter à la insteadOf ( ssh ou https )

    go env -w GOPRIVATE="mod.org"

3ï¸ âƒ £ ajouter https://mod.org au référentiel privé

    # [url "http://localhost:7990/scm"]
    [url "ssh://git@mod.org"]
          insteadOf = https://mod.org

â —Après toutes les préparations, le module sera accessible pour go mod download depuis un autre module par version tags

    http://localhost:7990/scm/gom/bar.git
    ssh://git@mod.org/gom/bar.git

ou manuellement

    module mod.org/gom/bar

    go 1.13


0 commentaires

0
votes

Vous ne pouvez pas utiliser le .git privé sans l'extension .git car les outils go ne connaissent pas le protocole de contrôle de version de votre dépôt privé, git ou svn ou tout autre.

Pour github.com ou golang.org ils sont codés en dur dans la source de go.

L'outil go effectuera une requête https pour le savoir avant de récupérer votre dépôt privé:

require private/user/repo v1.0.0

...

replace private/user/repo => private.server/user/repo.git v1.0.0

Si votre dépôt privé ne prend pas en charge https , veuillez utiliser la syntaxe de replace du module go pour indiquer directement les outils go:

https://private/user/repo?go-get=1

https://golang.org/cmd/go/#hdr-Remote_import_paths


0 commentaires