Bagaimana cara mendapatkan git ke default ke ssh dan bukan https untuk repositori baru


206

Hari-hari ini ketika saya membuat repositori baru di GitHub pada halaman setup yang saya dapatkan:

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

Dan setiap kali saya harus menekan komit, saya harus memasukkan nama pengguna dan kata sandi GitHub saya.

Saya bisa mengubahnya secara manual ke

git@github.com:nikhilbhardwaj/abc.git

di .git/config. Saya menemukan ini cukup menjengkelkan - apakah ada cara saya dapat mengkonfigurasi git untuk menggunakan SSH secara default?


Saya pikir jawaban MoOx mungkin paling konsisten dengan apa yang Anda cari. The insteadOftrick telah ada sejak setidaknya tahun 2012. Juga lihat Bagaimana mengkonversi git:url ke http:url .
jww

Jawaban:


300

Atur cabang asal repositori menjadi SSH

Halaman pengaturan repositori GitHub hanyalah daftar perintah yang disarankan (dan GitHub sekarang menyarankan menggunakan protokol HTTPS). Kecuali Anda memiliki akses administratif ke situs GitHub, saya tidak tahu cara untuk mengubah perintah yang disarankan.

Jika Anda lebih suka menggunakan protokol SSH, cukup tambahkan cabang jarak jauh seperti itu (yaitu gunakan perintah ini sebagai pengganti perintah yang disarankan GitHub). Untuk memodifikasi cabang yang ada, lihat bagian berikutnya.

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

Ubah repositori yang sudah ada sebelumnya

Seperti yang sudah Anda ketahui, untuk mengganti repositori yang sudah ada untuk menggunakan SSH alih-alih HTTPS, Anda dapat mengubah url jarak jauh di dalam .git/configfile Anda .

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

Cara pintas adalah dengan menggunakan set-urlperintah:

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

Informasi lebih lanjut tentang sakelar SSH-HTTPS


Terima kasih, saya tidak tahu tentang mereka menjadikan https pintar sebagai default.
nikhil

3
Ini mungkin baik untuk pengguna Windows, tetapi di Linux itu adalah langkah mundur: ssh selalu bekerja, dan caching kata sandi baru untuk Smart HTTPS hanya berfungsi pada Windows. Ada catatan tentang "Di mana versi Mac?" tapi tidak satu kata pun untuk pengguna linux.
MestreLion

Saya harus menambahkan bahwa, metode ini tidak mengganggu klien mac github sama sekali. Ubahlah dan Anda berdua dapat menggunakan baris perintah dan versi gui (klien github) dari git tanpa masalah.
Kemal Dağ

1
Sekali lagi set-urlbantu saya! Terima kasih banyak !
guozqzzu

183
  • 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/
    

Itu memberitahu git untuk selalu menggunakan SSH daripada HTTPS saat menghubungkan ke GitHub / BitBucket, jadi Anda akan mengotentikasi berdasarkan sertifikat secara default, alih-alih diminta kata sandi.


4
Jika ada yang ingin melihat ini di dokumentasi , cari url.<base>.insteadOf.

2
berhati-hatilah, ini sepertinya memecah beberapa hal - saya perhatikan beberapa fungsi homebrew berhenti bekerja setelah saya melakukan perubahan ini (yaitu menginstal versi / cabang non-default)
Awalan

1
Untuk gitlab: git config --global url.ssh: //git@gitlab.com/.insteadOf gitlab.com
MoOx

2
Saya pikir itu seharusnya git config --global url.ssh: //git@github.com: .insteadOf github.com , karena github suka git@github.com: <USERNAME> / <REPO> .git. (EDIT pasti git config --global url.git@github.com:.insteadOf https://github.com/bekerja di git 2.7.4.)
Glen Keane

1
Karena komentar di sini menyebutkan masalah homebrew, mungkin ide yang baik untuk menghapus --globaldan melakukan ini berdasarkan pr repo.
Pylinux

58

The respon yang diberikan oleh Trevor benar .

Tapi di sini adalah apa yang dapat Anda tambahkan langsung ke .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
Jauh lebih mudah +1
PiersyP

+1 untuk trik ini. Ini juga direkomendasikan oleh orang-orang kernel. Juga lihat git pull pada milis kernel pemula.
jww

solusi yang jauh lebih bersih - dan bagus untuk proyek golang di mana "go get" default ke https dan seseorang ingin secara individual mengatur url ke ssh sebagai gantinya misalnya untuk repo pribadi dll.
colm.anseo

1
Untuk Gitlab: [url "ssh://git@gitlab.com/"] insteadOf = https://gitlab.com/Ada juga pushInsteadOfjika Anda ingin memengaruhi URL push tetapi tidak mengambil. Dapat digunakan git remote -vuntuk memeriksa URL efektif yang akan digunakan git.
Beni Cherniavsky-Paskin

Ini tidak berhasil, setidaknya untuk repositori yang ada.
Andrew Koster

4

Anda mungkin secara tidak sengaja menduplikasi repositori di https alih-alih ssh. Saya telah membuat kesalahan ini beberapa kali di github. Pastikan Anda menyalin tautan ssh di tempat pertama saat kloning, alih-alih tautan https.


Perlu mengkloning yang baru dengan tautan ssh
codenamezero

Anda juga dapat mengubah tautan repo dari HTTP ke SSH, lihat jawaban lainnya.
Mike Lyons

3

Anda harus mengkloning di ssh bukan di https.

Untuk itu Anda perlu mengatur kunci ssh Anda. Saya sudah menyiapkan skrip kecil ini yang mengotomatiskan ini:

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

dan jalankan seperti

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

Ubah url jarak jauh Anda

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

Tambahkan konten ~/.ssh/github.com_rsa.pubke kunci ssh Anda di github.com

Periksa koneksi

ssh -T git@github.com

0

File 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

Edit reponame / .git / config

[remote "origin"]
        url = git@github.com:username/repo.git
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.