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.
go
erreur,git
renvoie "les invites du terminal sont désactivées". Pouvez-vous courirgit clone https://github.com/examplesite/myprivaterepo
sur votre ordinateur portable?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.Réponses:
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
la source
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
--add
drapeau comme suggéré par slatunje .la source
git config --global --add url."[email protected]:".insteadOf "https://github.com/"
[email protected]: Permission denied (publickey). fatal: Could not read from remote repository.
.1er -
go get
refusera 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.
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.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_repo
et cette fois il n'a pas été demandé de creds.la source
git clone
de 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é pourpassword
- supprimé le repo cloné, puis relancez lago get
commande et tout allait bien - merci! (OSX ici aussi)Il se plaint car il doit utiliser à la
ssh
place dehttps
mais 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 à lassh
place dehttps
. 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à
ssh
avecgit
dans votre machine, vous pouvez en toute sécurité modifier~/.gitconfig
et ajouter la ligne suivante tout en basRemarque: 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
GOPRIVATE
la 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/*
Une dernière chose à ne pas oublier de mentionner, vous pouvez toujours configurer
go get
pour vous authentifier et récupérerhttps
, tout ce que vous avez à faire est d'ajouter la ligne suivante à$HOME/.netrc
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.
la source
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.go env -w GOPRIVATE=gitlab.companyname.com
aidé. Cela devrait être une réponse acceptée. Merci pour cette réponse approfondie.Si vous voulez juste
go get
travailler 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
.profile
configuration ougit
comme ci-dessus pour une solution plus permanente.la source
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 :)
la source
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é.
la source