Écrire ceci pour ceux qui commencent tout juste avec Git et BitBucket sur Windows et qui ne sont pas aussi familiers avec Bash (car il s'agit à la fois d'un problème courant et d'un résultat Google de haut niveau lors de la recherche du message d'erreur dans la question).
Pour ceux qui ne craignent pas HTTPS et qui recherchent une solution rapide, faites défiler vers le bas de cette réponse pour obtenir des instructions sous POUR LES PARAINES
Pour ceux qui cherchent à résoudre le problème réel, suivez les instructions ci-dessous:
Résoudre le problème SSH le plus rapidement possible
Il s'agit d'un ensemble d'instructions dérivées de l'URL liée par VonC. Il a été modifié pour être aussi résilient et succinct que possible.
Définissez vos informations générales si vous ne l'avez pas déjà fait:
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
Vérifiez OpenSSH:
$ ssh -v localhost
OpenSSH_4.6p1, OpenSSL...
Vous voyez quelque chose comme ça?
- Oui: continuez.
- Non: passez à la section POUR LES PARAINES ou suivez l'article lié de VonC.
Vérifiez si vous avez déjà généré les clés:
$ ls -a ~/.ssh/id_*
S'il y a deux fichiers, vous pouvez ignorer l'étape suivante.
$ ssh-keygen
Laissez tout par défaut, entrez une phrase de passe. Vous devriez maintenant voir les résultats avec cette commande:
$ ls -a ~/.ssh/id_*
Recherchez un fichier de configuration existant:
$ ls -a ~/.ssh/config
Si vous obtenez un résultat, recherchez dans ce fichier des informations erronées. Si aucun fichier n'existe, procédez comme suit:
$ echo "Host bitbucket.org" >> ~/.ssh/config
$ echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config
Confirmez le contenu:
$ cat ~/.ssh/config
Host bitbucket.org
IdentityFile ~/.ssh/id_rsa
- L'espace unique avant "IdentityFile" est requis.
Vérifiez que vous démarrez l'agent SSH à chaque fois que vous exécutez GitBash:
$ cat ~/.bashrc
- Si vous voyez une fonction appelée
start_agent
, cette étape est déjà terminée.
- Si aucun fichier, continuez.
- S'il existe un fichier qui ne contient pas cette fonction, vous êtes dans une situation délicate. Il est probablement prudent de l'ajouter (en utilisant les instructions ci-dessous), mais ce n'est peut-être pas le cas! En cas de doute, effectuez une sauvegarde de votre .bashrc avant de suivre les instructions ci-dessous ou passez directement à la section POUR LES PARAINES .
Entrez ce qui suit dans GitBash pour créer votre fichier .bashrc:
$ echo "SSH_ENV=$HOME/.ssh/environment" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "# start the ssh-agent" >> ~/.bashrc
$ echo "function start_agent {" >> ~/.bashrc
$ echo " echo \"Initializing new SSH agent...\"" >> ~/.bashrc
$ echo " # spawn ssh-agent" >> ~/.bashrc
$ echo " /usr/bin/ssh-agent | sed 's/^echo/#echo/' > \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo " echo succeeded" >> ~/.bashrc
$ echo " chmod 600 \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo " . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo " /usr/bin/ssh-add" >> ~/.bashrc
$ echo "}" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "if [ -f \"\${SSH_ENV}\" ]; then" >> ~/.bashrc
$ echo " . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo " ps -ef | grep \${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {" >> ~/.bashrc
$ echo " start_agent;" >> ~/.bashrc
$ echo " }" >> ~/.bashrc
$ echo "else" >> ~/.bashrc
$ echo " start_agent;" >> ~/.bashrc
$ echo "fi" >> ~/.bashrc
Vérifiez que le fichier a été créé avec succès (le vôtre ne doit différer que là où "votre nom d'utilisateur" apparaît):
$ cat ~/.bashrc
SSH_ENV=/c/Users/yourusername/.ssh/environment
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
- Fermez GitBash et rouvrez-le.
- Vous devriez être invité à entrer votre phrase de passe (pour le fichier SSH que vous avez généré précédemment).
- S'il n'y a pas d'invite, soit vous n'avez pas défini de phrase de passe, soit GitBash n'exécute pas le script .bashrc (ce qui serait étrange, alors envisagez d'en revoir le contenu!). Si vous l'exécutez sur un Mac (OS X),
.bashrc
n'est pas exécuté par défaut - .bash_profile
est. Pour résoudre ce problème, placez cet extrait dans votre .bash_profile
:[[ -s ~/.bashrc ]] && source ~/.bashrc
Si vous n'avez pas entré de phrase de passe, vous auriez vu quelque chose comme ceci lors du démarrage de GitBash:
Initializing new SSH agent...
succeeded
Identity added: /c/Users/yourusername/.ssh/id_rsa (/c/Users/yourusername/.ssh/id_rsa)
Et ce qui suit devrait renvoyer des résultats:
$ ssh-add -l
Cependant, si vous obtenez les éléments suivants ssh-add -l
:
Could not open a connection to your authentication agent.
Cela n'a pas engendré l'agent SSH et votre .bashrc en est probablement la cause.
Si, au démarrage de GitBash, vous voyez ceci:
Initializing new SSH agent...
sh.exe": : No such file or directory
Cela signifie que vous avez oublié d'échapper le $ avec un \ lors de l'écho dans le fichier (c'est-à-dire que les variables ont été développées). Recréez votre .bashrc pour résoudre ce problème.
Vérifiez que l'agent est en cours d'exécution et que vos clés ont été ajoutées:
$ ssh-add -l
Devrait retourner quelque chose de similaire à ceci:
2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/yourusername/.ssh/id_rsa (RSA)
Exécutez la commande suivante pour obtenir votre clé publique:
$ cat ~/.ssh/id_rsa.pub
(il devrait renvoyer quelque chose commençant par "ssh-rsa ......"
- Cliquez sur l'icône de la fenêtre GitBash
- Cliquez sur Modifier
- Cliquez sur Marquer
- Mettez en surbrillance la clé publique à l'aide de votre souris (y compris le
ssh-rsa
bit de début et le == youremail@yourdomain.com
bit de fin )
- Cliquez avec le bouton droit sur la fenêtre (effectue une copie)
- Collez votre clé publique dans le Bloc-notes.
- Supprimez toutes les nouvelles lignes de sorte qu'il ne s'agisse que d'une seule ligne.
- Appuyez sur
CTRL+A
puis CTRL+C
pour copier à nouveau la clé publique dans votre presse-papiers.
Configurez votre clé privée avec BitBucket en effectuant les étapes suivantes:
- Ouvrez votre navigateur et accédez au site BitBucket.org
- Connectez-vous à BitBucket.org
- Cliquez sur votre avatar (en haut à droite)
- Cliquez sur Gérer le compte
- Cliquez sur Clés SSH (sous Sécurité dans le menu de gauche)
- Cliquez sur Ajouter une clé
- Entrez
Global Public Key
pour l'étiquette
- Collez la clé publique que vous avez copiée à partir du Bloc-notes
Une Global Public Key
entrée devrait maintenant être visible dans votre liste de clés.
- Revenir à GitBash
- cd dans le répertoire contenant votre projet
- Remplacez votre origine par la variante SSH (ce ne sera pas le cas si vous avez exécuté les étapes FOR THE LAZY )
Vérifiez vos télécommandes:
$ git remote -v
Basculez vers l'url SSH:
$ git remote set-url origin git@bitbucket.org:youraccount/yourproject.git
Vérifiez que les choses fonctionnent:
$ git remote show origin
Vous devriez voir quelque chose comme ceci:
Warning: Permanently added the RSA host key for IP address '...' to the list of known hosts.
* remote origin
Fetch URL: git@bitbucket.org:youruser/yourproject.git
Push URL: git@bitbucket.org:youruser/yourproject.git
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (fast-forwardable)
TERMINÉ!
Vous pouvez choisir d'utiliser HTTPS au lieu de SSH. Il vous faudra taper votre mot de passe pendant les opérations à distance (il est temporairement mis en cache après que vous l'avez tapé une fois). Voici comment configurer HTTPS:
POUR LES PARAINES
Vous devez résoudre le problème SSH comme décrit par VonC; cependant, si vous êtes pressé de vous engager et que vous n'avez pas les outils / le temps / les connaissances pour générer une nouvelle clé publique pour le moment , définissez votre origine sur l'alternative HTTPS:
> https://accountname@bitbucket.org/accountname/reponame.git
Utilisation d'un outil GUI tel que TortoiseGit ou des outils de ligne de commande .
Voici la documentation de cette URL d'origine alternative.
Ligne de commande pour ajouter une origine s'il n'en existe pas:
git remote add origin https://accountname@bitbucket.org/accountname/reponame.git
Ligne de commande pour modifier une origine existante:
git remote set-url origin https://accountname@bitbucket.org/accountname/reponame.git
REMARQUE: votre nom de compte n'est pas votre adresse e-mail.
Vous pouvez également définir vos informations globales:
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
Puis réessayez votre push (pas besoin de vous engager à nouveau)
git push origin master