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

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


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

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

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

Weitere Informationen zum SSH-HTTPS-Switch


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

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


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

2
Ich denke, dass es git config sein sollte --global url.ssh: //git@github.com: .insteadOf github.com , weil github git@github.com mag: <USERNAME> / <REPO> .git. (EDIT git config --global url.git@github.com:.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://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
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://git@gitlab.com/"] 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.


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

Ändern Sie Ihre Remote-URL

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

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

Verbindung prüfen

ssh -T git@github.com

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 = git@github.com:username/repo.git
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.