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

git@github.com: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?


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 git@github.com: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 = git@github.com:nikhilbhardwaj/abc.git

Un raccourci consiste à utiliser la set-urlcommande:

$ git remote set-url origin git@github.com:nikhilbhardwaj/abc.git

Plus d'informations sur le commutateur SSH-HTTPS


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://git@github.com/.insteadOf https://github.com/
    
  • BitBucket

    git config --global url.ssh://git@bitbucket.org/.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.


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: //git@gitlab.com/.insteadOf gitlab.com
MoOx

2
Je pense que cela devrait être git config --global url.ssh: //git@github.com: .insteadOf github.com , car github aime git@github.com: <USERNAME> / <REPO> .git. (EDIT git config --global url.git@github.com:.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://git@github.com/"]
  insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
  insteadOf = https://gitlab.com/
[url "ssh://git@bitbucket.org/"]
  insteadOf = https://bitbucket.org/

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://git@gitlab.com/"] 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.


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 myemail@example.com github.com

Changer votre URL distante

git remote set-url origin git@github.com:user/foo.git

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

Vérifier la connexion

ssh -T git@github.com

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 = git@github.com:username/repo.git
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.