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

[email protected]:nikhilbhardwaj/abc.git

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

nikhil
sumber
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 [email protected]: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 = [email protected]:nikhilbhardwaj/abc.git

Cara pintas adalah dengan menggunakan set-urlperintah:

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

Informasi lebih lanjut tentang sakelar SSH-HTTPS

David Cain
sumber
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://[email protected]/.insteadOf https://github.com/
    
  • BitBucket

    git config --global url.ssh://[email protected]/.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.

Trevor Austin
sumber
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: //[email protected]/.insteadOf gitlab.com
MoOx
2
Saya pikir itu seharusnya git config --global url.ssh: //[email protected]: .insteadOf github.com , karena github suka [email protected]: <USERNAME> / <REPO> .git. (EDIT pasti git config --global [email protected]:.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://[email protected]/"]
  insteadOf = https://github.com/
[url "ssh://[email protected]/"]
  insteadOf = https://gitlab.com/
[url "ssh://[email protected]/"]
  insteadOf = https://bitbucket.org/
MoOx
sumber
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://[email protected]/"] 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.

Mike Lyons
sumber
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 [email protected] github.com

Ubah url jarak jauh Anda

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

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

Periksa koneksi

ssh -T [email protected]
rofrol
sumber
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 = [email protected]:username/repo.git
bhargav joshi
sumber