Jak przywrócić domyślną git do ssh, a nie https dla nowych repozytoriów

205

Obecnie, gdy tworzę nowe repozytorium w GitHub na stronie konfiguracji, otrzymuję:

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

I za każdym razem, gdy muszę wcisnąć zatwierdzenie, muszę wprowadzić nazwę użytkownika i hasło do GitHub.

Mogę to ręcznie zmienić na

[email protected]:nikhilbhardwaj/abc.git

w .git/config. Uważam to za dość irytujące - czy jest jakiś sposób, aby skonfigurować git do domyślnego używania SSH?

nikhil
źródło
Myślę, że odpowiedź @ MoOx jest prawdopodobnie najbardziej zgodna z tym, czego szukasz. insteadOfSztuką jest już od co najmniej 2012. Zobacz także Jak przekonwertować git:URL do http:adresów URL .
jww

Odpowiedzi:

299

Ustaw gałąź początkową repozytorium na SSH

Strona konfiguracji repozytorium GitHub to tylko sugerowana lista poleceń (a GitHub sugeruje teraz użycie protokołu HTTPS). O ile nie masz dostępu administracyjnego do witryny GitHub, nie znam żadnego sposobu zmiany sugerowanych poleceń.

Jeśli wolisz używać protokołu SSH, po prostu dodaj taką gałąź zdalną (tj. Użyj tego polecenia zamiast polecenia sugerowanego przez GitHub). Aby zmodyfikować istniejący oddział, zobacz następną sekcję.

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

Zmodyfikuj istniejące repozytorium

Jak już wiesz, aby przełączyć istniejące repozytorium na SSH zamiast HTTPS, możesz zmienić zdalny adres URL w swoim .git/configpliku.

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

Skrótem jest użycie set-urlpolecenia:

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

Więcej informacji o przełączniku SSH-HTTPS

David Cain
źródło
Dzięki, nie wiedziałem o tym, że domyślnie używają smart https.
nikhil
3
Może to być dobre dla użytkowników systemu Windows, ale w systemie Linux był to duży krok wstecz: ssh zawsze działało, a nowe buforowanie haseł dla Smart HTTPS działa tylko w systemie Windows. Jest notatka na temat „Gdzie jest wersja Mac?” ale ani jednego słowa dla użytkowników Linuksa.
MestreLion,
Powinienem dodać, że ta metoda w ogóle nie koliduje z klientem Mac github. Zmień go i bez problemu możesz używać zarówno wiersza poleceń, jak i wersji GUI (klienta github) git.
Kemal Dağ
1
Ponownie set-urlpomóżcie mi! Wielkie dzięki !
guozqzzu
182
  • GitHub

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

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

To mówi gitowi, aby zawsze używał SSH zamiast HTTPS podczas łączenia się z GitHub / BitBucket, więc domyślnie uwierzytelnisz się za pomocą certyfikatu, zamiast monitować o hasło.

Trevor Austin
źródło
4
Jeśli ktoś chce to sprawdzić w dokumentacji , wyszukaj url.<base>.insteadOf.
2
bądź ostrożny, wydaje się, że to psuje pewne rzeczy - zauważyłem, że niektóre funkcje homebrew przestały działać po dokonaniu tej zmiany (mianowicie instalowanie niestandardowych wersji / gałęzi)
Prefiks
1
Dla gitlab: git config --global url.ssh: //[email protected]/.insteadOf gitlab.com
MoOx
2
I myślę , że powinno być git config --global url.ssh: //[email protected]: .insteadOf github.com , ponieważ GitHub lubi [email protected]: <nazwa użytkownika> / <REPO> .git. (EDYCJA git config --global [email protected]:.insteadOf https://github.com/działa na pewno w git 2.7.4.)
Glen Keane
1
Ponieważ w komentarzu wspomniano o problemach z homebrew, dobrym pomysłem może być usunięcie --globali zrobienie tego na zasadzie pr repo.
Pylinux
58

Odpowiedź udzielana przez Trevor jest poprawna .

Ale oto, co możesz bezpośrednio dodać w swoim .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
źródło
2
Znacznie prostsze +1
PiersyP
For1 za tę sztuczkę. Jest to również zalecane przez ludzi jądra. Zobacz także git pull na liście mailowej początkujących jądra.
jww
znacznie czystsze rozwiązanie - i świetne dla projektów Golang , w których domyślnie „go get” domyślnie przyjmuje https, a zamiast tego chcemy indywidualnie ustawić adresy URL na ssh, np. do prywatnych
repozytoriów
1
W przypadku Gitlab: [url "ssh://[email protected]/"] insteadOf = https://gitlab.com/Istnieje również pushInsteadOfmożliwość wpływania na wypychany adres URL, ale nie pobierania. Może służyć git remote -vdo sprawdzania skutecznych adresów URL, których użyje git.
Beni Cherniavsky-Paskin
To nie działa, przynajmniej w przypadku istniejących repozytoriów.
Andrew Koster,
4

Możliwe, że przypadkowo sklonowałeś repozytorium w https zamiast ssh. Popełniłem ten błąd wiele razy na github. Upewnij się, że skopiujesz link ssh w pierwszej kolejności podczas klonowania, zamiast linku https.

Mike Lyons
źródło
Musisz sklonować nowy z linkiem ssh
codenamezero
Możesz także zmienić link repo z HTTP na SSH, zobacz inne odpowiedzi.
Mike Lyons,
3

Musisz sklonować w ssh, a nie w https.

W tym celu musisz ustawić klucze ssh. Przygotowałem ten mały skrypt, który automatyzuje to:

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

i uruchom to jak

bash script.sh [email protected] github.com

Zmień swój zdalny adres URL

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

Dodaj treść ~/.ssh/github.com_rsa.pubdo swoich kluczy ssh na github.com

Sprawdź połączenie

ssh -T [email protected]
rofrol
źródło
0

Plik 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

Edytuj reponame / .git / config

[remote "origin"]
        url = [email protected]:username/repo.git
Bhargaw Joshi
źródło