Yeni depolar için https'ye değil ssh'ye varsayılan olarak git'i nasıl alabilirim?


206

Kurulum sayfasında GitHub'da yeni bir depo oluşturduğum bu günlerde:

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

Ve bir taahhütte bulunmak istediğimde GitHub kullanıcı adımı ve şifremi girmem gerekiyor.

Bunu manuel olarak değiştirebilirim

git@github.com:nikhilbhardwaj/abc.git

içinde .git/config. Bunu oldukça rahatsız edici buluyorum - git'i varsayılan olarak SSH kullanmak için yapılandırabileceğim bir yol var mı?


@ MoOx'un cevabı muhtemelen aradığınız şeyle en tutarlı olduğunu düşünüyorum. insteadOfEn az 2012. Ayrıca bkz beri hile civarında olmuştur dönüştürmek için nasıl git:urllerini http:URL'ler .
jww

Yanıtlar:


300

Bir deponun kaynak dalını SSH olarak ayarlama

GitHub veri havuzu kurulum sayfası yalnızca önerilen bir komut listesidir (ve GitHub artık HTTPS protokolünü kullanmanızı önerir). GitHub'ın sitesine yönetici erişiminiz yoksa, önerilen komutlarını değiştirmenin hiçbir yolunu bilmiyorum.

SSH protokolünü kullanmayı tercih ederseniz, bunun gibi bir uzak dal ekleyin (örneğin, bu komutu GitHub'ın önerilen komutu yerine kullanın). Varolan bir dalı değiştirmek için sonraki bölüme bakın.

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

Önceden var olan bir depoyu değiştirme

Bildiğiniz gibi, önceden var olan bir depoyu HTTPS yerine SSH kullanmak üzere değiştirmek için .git/configdosyanızdaki uzak URL'yi değiştirebilirsiniz .

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

Kısayol, şu set-urlkomutu kullanmaktır :

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

SSH-HTTPS anahtarı hakkında daha fazla bilgi


Teşekkürler, akıllı https'yi varsayılan yaptıklarını bilmiyordum.
nikhil

3
Bu, Windows kullanıcıları için iyi olabilir, ancak Linux'ta oldukça geriye doğru bir adımdı: ssh her zaman işe yaradı ve Smart HTTPS için yeni parola önbellekleme yalnızca Windows'ta çalışıyor. Bir not gidecekseniz "Nerede Mac sürümü nedir?" ancak linux kullanıcıları için tek bir kelime bile yok .
MestreLion

Bunu eklemeliyim, bu yöntem github'ın mac istemcisine hiç müdahale etmiyor. Değiştirin ve git komut satırını ve gui sürümünü (github'ın istemcisi) sorunsuz kullanabilirsiniz.
Kemal Dağ

1
Yine set-urlbana yardım et! Çok teşekkürler !
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/
    

Git'e GitHub / BitBucket'e bağlanırken HTTPS yerine her zaman SSH kullanılmasını söyler, böylece parola istenmek yerine varsayılan olarak sertifika ile kimlik doğrulaması yaparsınız.


4
Herhangi biri bunu belgelerde aramak istiyorsa , arayın url.<base>.insteadOf.

2
dikkatli olun bu bazı şeyleri kırmak gibi görünüyor - Ben bu değişikliği yaptıktan sonra (yani varsayılan olmayan sürümleri / dalları yüklemek) homebrew bazı işlevselliği durdu fark ettim
Önek

1
Gitlab için: git config --global url.ssh: //git@gitlab.com/.insteadOf gitlab.com
MoOx

2
Ben düşünüyorum //git@github.com: .insteadOf o git config --global url.ssh olması gerektiğini github.com , github git@github.com sever çünkü: <username> / <REPO> .git. (EDIT git config --global url.git@github.com:.insteadOf https://github.com/kesin 2.7.4'te çalışır.)
Glen Keane

1
Buradaki bir yorum homebrew problemlerinden bahsettiğinden, bunu --globalbir repo esasına göre kaldırmak ve yapmak iyi bir fikir olabilir .
Pylinux

58

Trevor tarafından verilen yanıt doğrudur .

Ancak, aşağıdakilere doğrudan ekleyebilirsiniz .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
Çok daha basit +1
PiersyP

Bu numara için +1 . Çekirdek insanlar tarafından da önerilir. Ayrıca çekirdek yeni başlayanlar posta listesi git git bakın .
jww

çok daha temiz bir çözüm - ve "go get" varsayılanlarının https'ye ayarlandığı ve birisinin URL'leri tek tek ssh olarak özel
depolar

1
Gitlab için: Push URL'yi etkilemek istiyorsanız, ancak getirmek istemiyorsanız [url "ssh://git@gitlab.com/"] insteadOf = https://gitlab.com/da vardır pushInsteadOf. Kullanabilir miyim git remote -vkullanacak git etkili URL'ler incelemek için.
Beni Cherniavsky-Paskin

En azından mevcut depolar için bu işe yaramıyor.
Andrew Koster

4

Depoyu yanlışlıkla ssh yerine https olarak klonlamış olabilirsiniz. Bu hatayı github'da defalarca yaptım. Klonlama yaparken https bağlantısı yerine ssh bağlantısını ilk etapta kopyaladığınızdan emin olun.


Ssh link ile yeni bir klonlamak gerekiyor
codenamezero

Repo bağlantısını HTTP'den SSH'ye de değiştirebilirsiniz, diğer yanıtlara bakın.
Mike Lyons

3

Https'de değil ssh'de klonlamanız gerekir.

Bunun için ssh tuşlarınızı ayarlamanız gerekir. Bunu otomatik hale getiren bu küçük komut dosyasını hazırladım:

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

ve onu çalıştır

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

Uzak URL'nizi değiştirme

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

~/.ssh/github.com_rsa.pubGithub.com'da ssh anahtarlarınıza içerik ekleyin

Bağlantıyı kontrol et

ssh -T git@github.com

0

SSH Dosyası

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

Reponame / .git / config dosyasını düzenle

[remote "origin"]
        url = git@github.com:username/repo.git
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.