Wie bekomme ich git standardmäßig auf ssh und nicht auf https für neue Repositorys?

205

In diesen Tagen, wenn ich auf der Setup-Seite ein neues Repository auf GitHub erstelle, erhalte ich:

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

Und wann immer ich ein Commit drücken muss, muss ich meinen GitHub-Benutzernamen und mein Passwort eingeben.

Ich kann das manuell ändern

[email protected]:nikhilbhardwaj/abc.git

in der .git/config. Ich finde das ziemlich irritierend - gibt es eine Möglichkeit, git so zu konfigurieren, dass es standardmäßig SSH verwendet?

Nikil
quelle
Ich denke, die Antwort von @ MoOx stimmt wahrscheinlich am ehesten mit dem überein, was Sie suchen. Der insteadOfTrick gibt es seit mindestens 2012. Siehe auch So konvertieren Sie git:URLs in http:URLs .
JWW

Antworten:

299

Richten Sie den Ursprungszweig eines Repositorys als SSH ein

Die Setup-Seite für das GitHub-Repository ist nur eine vorgeschlagene Liste von Befehlen (und GitHub schlägt jetzt die Verwendung des HTTPS-Protokolls vor). Sofern Sie keinen Administratorzugriff auf die Website von GitHub haben, kann ich die vorgeschlagenen Befehle nicht ändern.

Wenn Sie lieber das SSH-Protokoll verwenden möchten, fügen Sie einfach einen Remote-Zweig wie diesen hinzu (dh verwenden Sie diesen Befehl anstelle des von GitHub vorgeschlagenen Befehls). Informationen zum Ändern eines vorhandenen Zweigs finden Sie im nächsten Abschnitt.

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

Ändern Sie ein bereits vorhandenes Repository

Wie Sie bereits wissen, können Sie die Remote-URL in Ihrer .git/configDatei ändern, um ein bereits vorhandenes Repository auf SSH anstelle von HTTPS umzustellen .

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

Eine Verknüpfung ist die Verwendung des set-urlBefehls:

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

Weitere Informationen zum SSH-HTTPS-Switch

David Cain
quelle
Vielen Dank, ich wusste nicht, dass sie Smart https zum Standard machen.
Nikil
3
Dies mag für Windows-Benutzer gut sein, aber unter Linux war es ein ziemlicher Rückschritt: ssh hat immer funktioniert, und das neue Kennwort-Caching für Smart HTTPS funktioniert nur unter Windows. Es gibt einen Hinweis zu "Wo ist die Mac-Version?" aber kein einziges Wort für Linux-Benutzer.
MestreLion
Ich sollte hinzufügen, dass diese Methode den Mac-Client von github überhaupt nicht beeinträchtigt. Wenn Sie es ändern, können Sie problemlos die Befehlszeile und die GUI-Version (Githubs Client) von Git verwenden.
Kemal Dağ
1
Wieder set-urlhelfen Sie mir! Vielen Dank !
Guozqzzu
181
  • GitHub

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

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

Das weist git an, beim Herstellen einer Verbindung zu GitHub / BitBucket immer SSH anstelle von HTTPS zu verwenden, sodass Sie sich standardmäßig per Zertifikat authentifizieren, anstatt zur Eingabe eines Kennworts aufgefordert zu werden.

Trevor Austin
quelle
4
Wenn jemand dies in der Dokumentation nachschlagen möchte , suchen Sie nach url.<base>.insteadOf.
2
Seien Sie vorsichtig, dies scheint einige Dinge zu beschädigen. Ich habe festgestellt, dass einige Funktionen von Homebrew nach dieser Änderung nicht mehr funktionieren (nämlich Installation von nicht standardmäßigen Versionen / Zweigen).
Präfix
1
Für gitlab: git config --global url.ssh: //[email protected]/.insteadOf gitlab.com
MoOx
2
Ich denke, dass es git config sein sollte --global url.ssh: //[email protected]: .insteadOf github.com , weil github [email protected] mag: <USERNAME> / <REPO> .git. (EDIT git config --global [email protected]:.insteadOf https://github.com/funktioniert sicher in Git 2.7.4.)
Glen Keane
1
Da in einem Kommentar hier Homebrew-Probleme erwähnt wurden, ist es möglicherweise eine gute Idee, diese zu entfernen --globalund auf Pro-Repo-Basis durchzuführen.
Pylinux
58

Die Antwort von Trevor ist korrekt .

Aber hier ist, was Sie direkt in Ihre hinzufügen können .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
quelle
2
Viel einfacher +1
PiersyP
+1 für diesen Trick. Es wird auch von den Kernel-Leuten empfohlen. Siehe auch Git Pull auf der Mailingliste der Kernel-Neulinge.
JWW
viel sauberere Lösung - und ideal für Golang- Projekte, bei denen "go get" standardmäßig https ist und man die URLs einzeln auf ssh setzen möchte, z. B. für private Repos usw.
colm.anseo
1
Für Gitlab: [url "ssh://[email protected]/"] insteadOf = https://gitlab.com/Es gibt auch, pushInsteadOfwenn Sie die Push-URL beeinflussen, aber nicht abrufen möchten. Kann verwendet werden git remote -v, um effektive URLs zu überprüfen, die git verwenden wird.
Beni Cherniavsky-Paskin
Dies funktioniert zumindest bei vorhandenen Repositorys nicht.
Andrew Koster
4

Möglicherweise haben Sie das Repository versehentlich in https anstelle von ssh geklont. Ich habe diesen Fehler mehrfach auf Github gemacht. Stellen Sie sicher, dass Sie beim Klonen zuerst den ssh-Link anstelle des https-Links kopieren.

Mike Lyons
quelle
Müssen Sie einen neuen mit dem SSH-Link klonen
Codenamezero
Sie können auch den Repo-Link von HTTP zu SSH ändern, siehe die anderen Antworten.
Mike Lyons
3

Sie müssen in ssh klonen, nicht in https.

Dazu müssen Sie Ihre SSH-Schlüssel einstellen. Ich habe dieses kleine Skript vorbereitet, das dies automatisiert:

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

und lauf es wie

bash script.sh [email protected] github.com

Ändern Sie Ihre Remote-URL

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

Fügen Sie ~/.ssh/github.com_rsa.pubIhren ssh-Schlüsseln auf github.com Inhalte hinzu

Verbindung prüfen

ssh -T [email protected]
Rofrol
quelle
0

SSH-Datei

~/.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

Bearbeiten Sie reponame / .git / config

[remote "origin"]
        url = [email protected]:username/repo.git
Bhargav Joshi
quelle