aller obtenir des résultats dans l'erreur 'invite de terminal désactivée' pour le dépôt privé github

202

J'ai créé le site d'exemples de repo privé / myprivaterepo à l'aide de l'interface utilisateur Github de mon navigateur.

Ensuite, je suis allé dans mon répertoire go (sur le bureau) et je l'ai cloné:

$ cd $GOPATH
$ go get github.com/examplesite/myprivaterepo

Jusqu'ici tout va bien. Créé le fichier scheduler.go, ajouté au référentiel et envoyé.

$ vim scheduler.go
$ git add scheduler.go
$ git commit
$ git push

Tout va bien. Mais lorsque je suis allé sur un ordinateur portable propre et que j'ai essayé de cloner le dépôt, j'ai eu une erreur:

# Now on laptop, which doesn't yet know about the repo
$ cd $GOPATH
$ go get github.com/examplesite/myprivaterepo
# At this point it should ask for my user ID and password ,right? But it doesn't.
# Instead, this error occurs:
cd .; git clone https://github.com/examplesite/myprivaterepo /Users/tom/go/src/github.com/examplesite/myprivaterepo
Cloning into '/Users/tom/go/src/github.com/examplesite/myprivaterepo'...
fatal: could not read Username for 'https://github.com': terminal prompts disabled
package github.com/examplesite/myprivaterepo: exit status 128

Pourquoi mon ordinateur portable déteste-t-il mon propre dépôt et comment puis-je l'amener à accepter son destin? Merci.

tomcam
la source
10
Ce n'est pas une goerreur, gitrenvoie "les invites du terminal sont désactivées". Pouvez-vous courir git clone https://github.com/examplesite/myprivatereposur votre ordinateur portable?
JimB
1
Merci. Le clone git a fonctionné. Ensuite, allez travailler. Quel est le problème? Dois-je "amorcer la pompe" comme ça à chaque fois ou ai-je mal configuré quelque chose?
tomcam
1
@tomcam, vous pouvez ajouter des clés ssh au compte github et aller get fonctionnera dès le début, voir help.github.com/articles/generating-ssh-keys
alex vasi
@alexvasi: cela ne fonctionne que s'il clone d'abord le dépôt lui-même sur ssh, car il demandera https://github.com/si le chemin d'importation n'existe pas. Le processus git devrait pouvoir demander le nom d'utilisateur / mot de passe, il doit donc y avoir quelque chose de différent dans la configuration de l'ordinateur portable - shell différent, .gitconfig différent, une variable env, etc.
JimB
Tout cela m'a aidé, mais je ne sais pas comment marquer comme répondu et / ou résolu. Voici ce que j'ai jusqu'ici.
tomcam

Réponses:

192

go get désactive "l'invite du terminal" par défaut. Cela peut être changé en définissant une variable d'environnement de git:

env GIT_TERMINAL_PROMPT=1 go get github.com/examplesite/myprivaterepo
Mer de Shafreeck
la source
335

J'ai trouvé cela extrêmement utile et cela a résolu mon problème. Cette commande permettra à votre 2FA de faire son travail (et vous évitera d'avoir à saisir votre nom d'utilisateur et votre mot de passe):

git config --global --add url."[email protected]:".insteadOf "https://github.com/"

Source: http://albertech.blogspot.com/2016/11/fix-git-error-could-not-read-username.html

Si vous n'utilisez pas 2FA, vous pouvez toujours utiliser SSH et cela fonctionnera.

Edit: a ajouté le --adddrapeau comme suggéré par slatunje .

Wylliam Judd
la source
12
Je recommande d'ajouter le drapeau --add afin de ne pas écraser les paramètres existants que vous pourriez avoir Par exemple:git config --global --add url."[email protected]:".insteadOf "https://github.com/"
slatunje
5
C'est la meilleure solution IMO. Il est plus sûr et moins d'effort (une fois configuré) d'utiliser les clés SSH pour l'authentification au lieu du nom d'utilisateur / mot de passe
Bodecker
1
Ne faites pas cela sous Windows. J'ai fini avec une erreur [email protected]: Permission denied (publickey). fatal: Could not read from remote repository..
Shital Shah
1
fonctionne aussi pour linux. devrait fonctionner pour tout le monde si vous utilisez ssh globalement
Chiptus
1
c'est génial jusqu'à ce que votre entreprise bloque tous les transports ssh sortants.
honneur krystan
38

1er - go getrefusera de s'authentifier sur la ligne de commande. Vous devez donc mettre en cache les informations d'identification dans git. Parce que j'utilise osx, je peux utiliser l'assistant d'identification osxkeychain.

2ème Pour moi, j'ai activé 2FA et je n'ai donc pas pu utiliser mon mot de passe pour m'authentifier. Au lieu de cela, j'ai dû générer un jeton d'accès personnel à utiliser à la place du mot de passe.

  1. aide à la configuration des informations d'identification osxkeychain https://help.github.com/articles/caching-your-github-password-in-git/
  2. Si vous utilisez TFA au lieu d'utiliser votre mot de passe, générez un jeton d'accès personnel avec une portée repo https://github.com/settings/tokens
  3. git clone un dépôt privé juste pour le mettre en cache le mot de passe git clone https://github.com/user/private_repo et utilise votre nom d'utilisateur github.com pour le nom d'utilisateur et le jeton d'accès personnel généré pour le mot de passe.
  4. Suppression du référentiel juste cloné et retest pour s'assurer que les creds ont été mis en cache - git clone https://github.com/user/private_repoet cette fois il n'a pas été demandé de creds.

    1. go get fonctionnera avec tous les dépôts auxquels le jeton d'accès personnel peut accéder. Vous devrez peut-être répéter les étapes avec d'autres comptes / jetons, car les autorisations varient.
Mike Graf
la source
1
J'ai 2FA et cela a fonctionné pour moi - a généré un jeton (avec des privs complets), fait un git clonede l'un de mes propres dépôts existants (il est public en fait), a été invité usernameà entrer mon nom d'utilisateur GitHub, puis mis dans le jeton généré pour password- supprimé le repo cloné, puis relancez la go getcommande et tout allait bien - merci! (OSX ici aussi)
Eric Dorsey
3
C'est aussi très bien car vous pouvez limiter la portée du jeton à "lire" uniquement pour les dépôts privés, donc même s'il entre d'une manière ou d'une autre dans une image dans la nature, ils ne peuvent que lire votre code et ne pas y insérer des éléments et vous pouvez révoquez le jeton très facilement. Je ne me souviens pas s'ils ont encore une expiration automatique intégrée.
dragon788
32

Il se plaint car il doit utiliser à la sshplace de httpsmais votre git est toujours configuré avec https. Donc, fondamentalement, comme d'autres mentionnés précédemment, vous devez soit activer les invites, soit configurer git pour l'utiliser à la sshplace de https. un moyen simple de le faire en exécutant ce qui suit:

git config --global --add url."[email protected]:".insteadOf "https://github.com/"

ou si vous utilisez déjà sshavec gitdans votre machine, vous pouvez en toute sécurité modifier ~/.gitconfiget ajouter la ligne suivante tout en bas

Remarque: cela couvre tous les SVC, le contrôle de version source, qui dépend de ce que vous utilisez exactement, github, gitlab, bitbucket)

# Enforce SSH
[url "ssh://[email protected]/"]
  insteadOf = https://github.com/
[url "ssh://[email protected]/"]
        insteadOf = https://gitlab.com/
[url "ssh://[email protected]/"]
  insteadOf = https://bitbucket.org/
  • Si vous voulez garder les pompts de mot de passe désactivés, vous devez mettre le mot de passe en cache. Pour plus d'informations sur la façon de mettre en cache votre mot de passe github sur mac, Windows ou Linux, veuillez visiter cette page .

  • Pour plus d'informations sur la façon d'ajouter ssh à votre compte github, veuillez visiter cette page .

De plus, plus important encore, s'il s'agit d'un référentiel privé pour une entreprise ou pour vous-même, vous devrez peut-être ignorer l'utilisation d'une base de données proxy ou de somme de contrôle pour ces dépôts afin d'éviter de les exposer publiquement.

Pour ce faire, vous devez définir GOPRIVATEla variable d'environnement qui contrôle les modules que la commande go considère comme privés (non disponibles publiquement) et ne doit donc PAS utiliser le proxy ou la base de données de somme de contrôle.

La variable est une liste de modèles séparés par des virgules (même syntaxe de Go path.Match) de préfixes de chemin de module. Par exemple,

export GOPRIVATE=*.corp.example.com,github.com/mycompany/*

Ou

go env -w GOPRIVATE=github.com/mycompany/*
  • Pour plus d'informations sur la résolution des problèmes de validation de la somme de contrôle des packages / modules privés, veuillez lire cet article .
  • Pour plus d'informations sur les modules go 13 et les nouvelles améliorations, veuillez consulter les notes de mise à jour des modules Go 1.13 .

Une dernière chose à ne pas oublier de mentionner, vous pouvez toujours configurer go getpour vous authentifier et récupérer https, tout ce que vous avez à faire est d'ajouter la ligne suivante à$HOME/.netrc

machine github.com login USERNAME password APIKEY
  • Pour les comptes GitHub, le mot de passe peut être un jeton d'accès personnel .
  • Pour plus d'informations sur la façon de procéder, veuillez consulter la page FAQ Go .

J'espère que cela aidera la communauté et fera gagner du temps aux autres pour résoudre rapidement les problèmes décrits. N'hésitez pas à laisser un commentaire au cas où vous souhaiteriez plus de soutien ou d'aide.

Muhammad Soliman
la source
4
GOPRIVATE( go env -w GOPRIVATE=github.com/mycompany/*) est la seule chose qui a fonctionné pour moi. Je pourrais suggérer de mettre cela sous son propre titre ou même dans une réponse propre pour le souligner un peu plus.
Bernhard Barker
Pour moi aussi, seulement go env -w GOPRIVATE=gitlab.companyname.com aidé. Cela devrait être une réponse acceptée. Merci pour cette réponse approfondie.
Pavel Gordon
18

Si vous voulez juste go gettravailler très vite et évoluer avec votre travail ...

Exportez simplement GIT_TERMINAL_PROMPT=1

$ export GIT_TERMINAL_PROMPT=1
$ go get [whatever]

Il vous demandera maintenant un utilisateur / pass pour le reste de votre session shell. Mettez ceci dans votre .profileconfiguration ou gitcomme ci-dessus pour une solution plus permanente.

EdH
la source
1

Si vous configurez votre gitconfig avec cette option, vous aurez plus tard un problème de clonage d'autres dépôts de GitHub

git config --global --add url. "[email protected]". Instead, "https://github.com/"

Au lieu de cela, je vous recommande d'utiliser cette option

echo "export GIT_TERMINAL_PROMPT=1" >> ~/.bashrc || ~/.zshrc

et n'oubliez pas de générer un jeton d'accès à partir de votre référentiel privé. Lorsque vous êtes invité à entrer votre mot de passe, collez simplement le jeton d'accès. Bon clone :)

cooljl86
la source
0

J'ai eu le même problème sur Windows "erreur: échec de l'exécution du script d'invite (code de sortie 1) fatal: impossible de lire le nom d'utilisateur pour ' https://github.com ': aucune erreur" en essayant de se connecter à github via la boîte de dialogue de connexion. Quand j'ai annulé la boîte de dialogue, git m'a demandé le login et le mot de passe dans la ligne de commande et cela a bien fonctionné.

Nick Proto
la source