Comment obtenir git par défaut sur ssh et non https pour les nouveaux référentiels

206

Ces jours-ci, lorsque je crée un nouveau référentiel sur GitHub sur la page de configuration, j'obtiens:

git remote add origin https://github.com/nikhilbhardwaj/abc.git
git push -u origin master

Et chaque fois que je dois pousser un commit, je dois entrer mon nom d'utilisateur et mon mot de passe GitHub.

Je peux le changer manuellement en

[email protected]:nikhilbhardwaj/abc.git

dans le .git/config. Je trouve cela assez irritant - existe-t-il un moyen de configurer git pour utiliser SSH par défaut?

nikhil
la source
Je pense que la réponse de @ MoOx est probablement la plus cohérente avec ce que vous recherchez. L' insteadOfastuce existe depuis au moins 2012. Voir également Comment convertir des git:URL en http:URL .
2017

Réponses:

300

Configurer la branche d'origine d'un référentiel pour qu'elle soit SSH

La page de configuration du référentiel GitHub n'est qu'une liste de commandes suggérées (et GitHub suggère désormais d'utiliser le protocole HTTPS). À moins que vous n'ayez un accès administratif au site de GitHub, je ne connais aucun moyen de modifier leurs commandes suggérées.

Si vous préférez utiliser le protocole SSH, ajoutez simplement une branche distante comme celle-ci (c'est-à-dire utilisez cette commande à la place de la commande suggérée par GitHub). Pour modifier une branche existante, consultez la section suivante.

$ git remote add origin [email protected]:nikhilbhardwaj/abc.git

Modifier un référentiel préexistant

Comme vous le savez déjà, pour changer un référentiel préexistant pour utiliser SSH au lieu de HTTPS, vous pouvez modifier l'URL distante dans votre .git/configfichier.

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    -url = https://github.com/nikhilbhardwaj/abc.git
    +url = [email protected]:nikhilbhardwaj/abc.git

Un raccourci consiste à utiliser la set-urlcommande:

$ git remote set-url origin [email protected]:nikhilbhardwaj/abc.git

Plus d'informations sur le commutateur SSH-HTTPS

David Cain
la source
Merci, je ne savais pas qu'ils faisaient du https intelligent la valeur par défaut.
nikhil
3
Cela peut être bon pour les utilisateurs de Windows, mais sous Linux, c'était un pas en arrière: ssh fonctionnait toujours et la nouvelle mise en cache des mots de passe pour Smart HTTPS ne fonctionne que sous Windows. Theres une note sur "Où est la version Mac?" mais pas un seul mot pour les utilisateurs de linux.
MestreLion
Je dois ajouter que cette méthode n'interfère pas du tout avec le client mac de github. Modifiez-le et vous pouvez à la fois utiliser la ligne de commande et la version gui (client de github) de git sans problème.
Kemal Dağ
1
Encore une fois, set-urlaidez-moi! Merci beaucoup !
guozqzzu
184
  • GitHub

    git config --global url.ssh://[email protected]/.insteadOf https://github.com/
    
  • BitBucket

    git config --global url.ssh://[email protected]/.insteadOf https://bitbucket.org/
    

Cela indique à git de toujours utiliser SSH au lieu de HTTPS lors de la connexion à GitHub / BitBucket, donc vous vous authentifierez par certificat par défaut, au lieu d'être invité à entrer un mot de passe.

Trevor Austin
la source
4
Si quelqu'un veut rechercher cela dans la documentation , recherchez url.<base>.insteadOf.
2
méfiez-vous, cela semble casser certaines choses - j'ai remarqué que certaines fonctionnalités de homebrew ont cessé de fonctionner après avoir effectué ce changement (à savoir l'installation de versions / branches non par défaut)
Préfixe
1
Pour gitlab: git config --global url.ssh: //[email protected]/.insteadOf gitlab.com
MoOx
2
Je pense que cela devrait être git config --global url.ssh: //[email protected]: .insteadOf github.com , car github aime [email protected]: <USERNAME> / <REPO> .git. (EDIT git config --global [email protected]:.insteadOf https://github.com/fonctionne dans git 2.7.4 à coup sûr.)
Glen Keane
1
Étant donné qu'un commentaire ici mentionne des problèmes d'homebrew, il peut être judicieux de le supprimer --globalet de le faire sur une base de repo.
Pylinux
58

La réponse fournie par Trevor est correcte .

Mais voici ce que vous pouvez ajouter directement dans votre .gitconfig:

# 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/
MoOx
la source
2
Beaucoup plus simple +1
PiersyP
+1 pour cette astuce. Il est également recommandé par les gens du noyau. Voir aussi git pull sur la liste de diffusion des débutants du noyau.
2017
solution beaucoup plus propre - et idéale pour les projets golang où «aller chercher» par défaut à https et où l'on veut définir individuellement les URL sur ssh à la place, par exemple pour les
dépôts
1
Pour Gitlab: [url "ssh://[email protected]/"] insteadOf = https://gitlab.com/Il y en a aussi pushInsteadOfsi vous voulez affecter l'URL de push mais pas le récupérer. Peut utiliser git remote -vpour inspecter les URL efficaces que git va utiliser.
Beni Cherniavsky-Paskin
Cela ne fonctionne pas, du moins pour les référentiels existants.
Andrew Koster
4

Vous avez peut-être accidentellement cloné le référentiel dans https au lieu de ssh. J'ai fait cette erreur plusieurs fois sur github. Assurez-vous de copier le lien ssh en premier lieu lors du clonage, au lieu du lien https.

Mike Lyons
la source
Besoin d'en cloner un nouveau avec le lien ssh
codenamezero
Vous pouvez également changer le lien de dépôt de HTTP en SSH, voir les autres réponses.
Mike Lyons
3

Vous devez cloner dans ssh et non dans https.

Pour cela, vous devez définir vos clés ssh. J'ai préparé ce petit script qui automatise ceci:

#!/usr/bin/env bash
email="$1"
hostname="$2"
hostalias="$hostname"
keypath="$HOME/.ssh/${hostname}_rsa"
ssh-keygen -t rsa -C $email -f $keypath
if [ $? -eq 0 ]; then
cat >> ~/.ssh/config <<EOF
Host $hostalias
        Hostname $hostname *.$hostname
        User git
    IdentitiesOnly yes
        IdentityFile $keypath
EOF
fi

et lancez-le comme

bash script.sh [email protected] github.com

Changer votre URL distante

git remote set-url origin [email protected]:user/foo.git

Ajoutez du contenu ~/.ssh/github.com_rsa.pubà vos clés SSH sur github.com

Vérifier la connexion

ssh -T [email protected]
rofrol
la source
0

Fichier SSH

~/.ssh/config file
Host *
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/null
    LogLevel QUIET
    ConnectTimeout=10
Host github.com
        User git
        AddKeystoAgent yes
        UseKeychain yes
        Identityfile ~/github_rsa

Modifier le changement de nom / .git / config

[remote "origin"]
        url = [email protected]:username/repo.git
bhargav joshi
la source