Come faccio ad avere git di default su ssh e non su https per i nuovi repository


206

In questi giorni quando creo un nuovo repository su GitHub nella pagina di installazione ottengo:

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

E ogni volta che devo inviare un commit, devo inserire il mio nome utente e la mia password GitHub.

Posso cambiarlo manualmente in

git@github.com:nikhilbhardwaj/abc.git

nel .git/config. Lo trovo abbastanza irritante - c'è un modo per configurare git per usare SSH di default?


Penso che la risposta di @ MoOx sia probabilmente più coerente con ciò che stai cercando. Il insteadOftrucco esiste da almeno il 2012. Vedi anche Come convertire gli git:URL in http:URL .
JWW

Risposte:


300

Impostare il ramo di origine di un repository su SSH

La pagina di configurazione del repository GitHub è solo un elenco di comandi suggerito (e GitHub ora suggerisce di usare il protocollo HTTPS). A meno che tu non abbia accesso amministrativo al sito di GitHub, non conosco alcun modo per modificare i comandi suggeriti.

Se preferisci usare il protocollo SSH, aggiungi semplicemente un ramo remoto in questo modo (cioè usa questo comando al posto del comando suggerito da GitHub). Per modificare un ramo esistente, vedere la sezione successiva.

$ git remote add origin git@github.com:nikhilbhardwaj/abc.git

Modifica un repository preesistente

Come già sapete, per passare a un repository preesistente per utilizzare SSH anziché HTTPS, è possibile modificare l'URL remoto all'interno di .git/config file.

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

Una scorciatoia è usare il set-url comando:

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

Ulteriori informazioni sullo switch SSH-HTTPS


Grazie, non sapevo che rendessero smart https il valore predefinito.
nikhil,

3
Questo può essere buono per gli utenti Windows, ma su Linux è stato un bel passo indietro: ssh ha sempre funzionato e la nuova memorizzazione nella cache della password per Smart HTTPS funziona solo su Windows. C'è una nota su "Dov'è la versione per Mac?" ma non una sola parola per gli utenti linux.
MestreLion,

Dovrei aggiungere che questo metodo non interferisce affatto con il client mac di github. Modificalo e puoi utilizzare la riga di comando e la versione gui (client di github) di git senza problemi.
Kemal Dağ l'

1
set-urlAiutami di nuovo ! Molte grazie !
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/
    

Questo dice a git di usare sempre SSH invece di HTTPS durante la connessione a GitHub / BitBucket, quindi ti autenticherai per certificato di default, invece che ti verrà richiesta una password.


4
Se qualcuno vuole cercarlo nella documentazione , cerca url.<base>.insteadOf.

2
attenzione, sembra che questo rompa alcune cose - ho notato che alcune funzionalità di homebrew hanno smesso di funzionare dopo aver apportato questa modifica (ovvero l'installazione di versioni / rami non predefiniti)
Prefisso

1
Per gitlab: git config --global url.ssh: //git@gitlab.com/.insteadOf gitlab.com
MoOx

2
Io penso che dovrebbe essere git config --global url.ssh: //git@github.com: .insteadOf github.com , perché GitHub piace git@github.com: <nomeutente> / <REPO> .git. (EDIT git config --global url.git@github.com:.insteadOf https://github.com/funziona sicuramente in git 2.7.4.)
Glen Keane,

1
Dal momento che un commento qui menzionato problemi homebrew potrebbe essere una buona idea rimuovere --globale fare questo su una base di pronti contro termine.
Pylinux il

58

La risposta fornita da Trevor è corretta .

Ma ecco cosa puoi aggiungere direttamente nel tuo .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
Molto più semplice +1
PiersyP

+1 per questo trucco. È anche raccomandato dalla gente del kernel. Vedi anche git pull sulla mailing list dei neofiti del kernel.
jww

soluzione molto più pulita - e ottima per i progetti di golang in cui "go get" viene impostato automaticamente su https e si desidera impostare singolarmente gli URL su ssh anziché ad esempio per i
repository

1
Per Gitlab: [url "ssh://git@gitlab.com/"] insteadOf = https://gitlab.com/esiste anche pushInsteadOfse si desidera influire sull'URL push ma non sul recupero. Può usare git remote -vper ispezionare gli URL efficaci che git utilizzerà.
Beni Cherniavsky-Paskin,

Questo non funziona, almeno per i repository esistenti.
Andrew Koster,

4

Potrebbe essere stato clonato accidentalmente il repository in https anziché in ssh. Ho fatto questo errore numerose volte su Github. Assicurati di copiare il collegamento ssh in primo luogo durante la clonazione, anziché il collegamento https.


È necessario clonarne uno nuovo con il collegamento ssh
nome in codice

Puoi anche cambiare il link repo da HTTP a SSH, vedi le altre risposte.
Mike Lyons,

3

Devi clonare in ssh non in https.

Per questo è necessario impostare i tasti SSH. Ho preparato questo piccolo script che automatizza questo:

#!/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

ed eseguirlo come

bash script.sh myemail@example.com github.com

Cambia l'URL remoto

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

Aggiungi il contenuto delle ~/.ssh/github.com_rsa.pubtue chiavi ssh su github.com

Controlla la connessione

ssh -T git@github.com

0

File 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

Modifica il nuovo nome / .git / config

[remote "origin"]
        url = git@github.com:username/repo.git
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.