Go get dépôt privé : guide étape par étape

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Go get d'un dépôt privé : pourquoi est-ce un casse-tête pour les débutants ?



Vous avez écrit un super package Go, vous l'avez mis sur GitHub dans un dépôt privé, et maintenant vous voulez l'utiliser dans un autre projet. Vous exécutez go get github.com/votrenom/secret-lib — et vous obtenez une erreur 403 Forbidden ou remote: Repository not found. Ça vous dit quelque chose ?



Cette situation est l'un des pièges les plus courants pour les développeurs Go débutants. La question sur Stack Overflow « What's the proper way to "go get" a private repository? » a recueilli des milliers de vues. Le problème est que go get utilise par défaut HTTPS, et non SSH, et ne connaît pas vos identifiants.



Dans cet article, nous allons examiner trois méthodes efficaces pour configurer go get pour les dépôts privés : via .gitconfig, .netrc et la variable d'environnement GOPRIVATE. Vous apprendrez à éviter les erreurs et à économiser des heures de débogage.



Pourquoi go get ne fonctionne-t-il pas avec les dépôts privés ?



Par défaut, go get essaie de télécharger le module via HTTPS. Pour les dépôts publics, cela fonctionne — l'accès anonyme est possible. Mais les dépôts privés nécessitent une authentification. Go ne sait pas insérer automatiquement un nom d'utilisateur/mot de passe ou un jeton.



Le deuxième problème est le mécanisme de découverte des modules. Go vérifie d'abord si le dépôt existe sur GitHub/GitLab/Bitbucket en analysant la page HTML. Pour les dépôts privés, cette page est inaccessible sans autorisation. D'où l'erreur repository not found, même si le dépôt existe.



Méthode 1 : modifier ~/.gitconfig (la plus simple)



Le moyen le plus simple est de forcer Git à utiliser SSH au lieu de HTTPS pour un domaine spécifique. Ajoutez les lignes suivantes au fichier ~/.gitconfig :



[url "git@github.com:"]    insteadOf = https://github.com/


Désormais, toute requête vers https://github.com/ sera automatiquement remplacée par SSH. Assurez-vous d'avoir configuré une clé SSH et de l'avoir ajoutée à votre compte GitHub/GitLab.



Vérifions :

go get github.com/votre-org/depot-prive# Fonctionne sans erreur !


Important : cette méthode modifie le comportement pour tous les dépôts sur GitHub. Si vous en avez besoin uniquement pour un seul, utilisez une configuration plus précise :



[url "git@github.com:votre-org/"]    insteadOf = https://github.com/votre-org/


Méthode 2 : .netrc pour les jetons et mots de passe



Si vous préférez HTTPS (par exemple, dans CI/CD), utilisez le fichier ~/.netrc. Go sait lire ce fichier et insérer les identifiants.



Créez le fichier ~/.netrc avec les droits 600 :



machine github.comlogin votre-nom-utilisateur-githubpassword votre-jeton-d-acces-personnel


Où obtenir le jeton ? Sur GitHub : Settings → Developer settings → Personal access tokens → Generate new token. Choisissez les droits repo (pour les dépôts privés).



Après cela :

go get github.com/votre-org/depot-prive


Pour GitLab :

machine gitlab.comlogin votre-nom-utilisateur-gitlabpassword votre-jeton-d-acces-gitlab


Cette méthode est idéale pour CI/CD, où les clés SSH ne sont pas toujours pratiques à stocker.



Méthode 3 : GOPRIVATE — une bouée de sauvetage pour les modules



La variable d'environnement GOPRIVATE indique à Go : « Hé, ces modules sont privés, n'essaie pas de les vérifier via le proxy public et ne va pas sur leurs pages HTML ». Cela résout le problème « repository not found ».



Définissez-la dans le terminal (ou ajoutez-la dans ~/.bashrc / ~/.zshrc) :



export GOPRIVATE=github.com/votre-org/*


Désormais, Go ignorera le proxy de modules public (proxy.golang.org) pour tous les dépôts de votre organisation. La commande go get deviendra

Blogs

Book Recommendations