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

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


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

Skrótem jest użycie set-urlpolecenia:

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

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


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

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


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

2
I myślę , że powinno być git config --global url.ssh: //git@github.com: .insteadOf github.com , ponieważ GitHub lubi git@github.com: <nazwa użytkownika> / <REPO> .git. (EDYCJA git config --global url.git@github.com:.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://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
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://git@gitlab.com/"] 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.


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

Zmień swój zdalny adres URL

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

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

Sprawdź połączenie

ssh -T git@github.com

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 = git@github.com:username/repo.git
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.