ฉันจะรับ git เป็นค่าเริ่มต้นเป็น ssh ได้อย่างไรและไม่ใช่ https สำหรับที่เก็บใหม่


206

วันนี้เมื่อฉันสร้างที่เก็บใหม่บน GitHub บนหน้าการตั้งค่าที่ฉันได้รับ:

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

และเมื่อใดก็ตามที่ฉันต้องส่งคำมั่นสัญญาฉันต้องป้อนชื่อผู้ใช้และรหัสผ่าน GitHub ของฉัน

ฉันสามารถเปลี่ยนสิ่งนั้นเป็น

git@github.com:nikhilbhardwaj/abc.git

.git/configใน ฉันพบว่ามันค่อนข้างน่ารำคาญ - มีวิธีที่ฉันสามารถกำหนดค่า git ให้ใช้ SSH เป็นค่าเริ่มต้นได้หรือไม่?


ฉันคิดว่าคำตอบของ @ MoOx น่าจะสอดคล้องกับสิ่งที่คุณค้นหามากที่สุด insteadOfเคล็ดลับที่ได้รับรอบอย่างน้อยตั้งแต่ปี 2012 นอกจากนี้ยังเห็นวิธีการแปลงgit:URL ที่จะhttp: URL ที่
jww

คำตอบ:


300

ตั้งค่าสาขาต้นกำเนิดของที่เก็บเป็น SSH

หน้าการตั้งค่าที่เก็บ GitHub เป็นเพียงรายการคำสั่งที่แนะนำ (และตอนนี้ GitHub แนะนำให้ใช้โปรโตคอล HTTPS) ถ้าคุณไม่มีสิทธิ์เข้าถึงระดับผู้ดูแลระบบในเว็บไซต์ของ GitHub ฉันไม่ทราบวิธีการเปลี่ยนคำสั่งที่แนะนำ

หากคุณต้องการใช้โปรโตคอล SSH เพียงเพิ่มสาขาระยะไกลเช่นนั้น (เช่นใช้คำสั่งนี้แทนคำสั่งที่แนะนำของ GitHub) หากต้องการแก้ไขสาขาที่มีอยู่ให้ดูหัวข้อถัดไป

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

แก้ไขที่เก็บที่มีอยู่แล้ว

ดังที่คุณทราบแล้วเมื่อต้องการสลับที่เก็บที่มีอยู่แล้วให้ใช้ SSH แทน HTTPS คุณสามารถเปลี่ยน URL ระยะไกลภายใน.git/configไฟล์ของคุณ

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

ทางลัดคือใช้set-urlคำสั่ง:

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

ข้อมูลเพิ่มเติมเกี่ยวกับสวิตช์ SSH-HTTPS


ขอบคุณฉันไม่รู้เกี่ยวกับพวกเขาที่ทำให้ https ฉลาดเป็นค่าเริ่มต้น
nikhil

3
นี่อาจเป็นสิ่งที่ดีสำหรับผู้ใช้ Windows แต่บน Linux มันค่อนข้างล้าหลัง: ssh ทำงานได้ตลอดเวลาและการแคชรหัสผ่านใหม่สำหรับ Smart HTTPS ใช้งานได้กับ Windows เท่านั้น มีข้อความเกี่ยวกับ"เวอร์ชันของ Mac อยู่ที่ไหน" แต่ไม่ใช่คำเดียวสำหรับผู้ใช้ linux
MestreLion

ฉันควรจะเพิ่มวิธีนี้จะไม่รบกวนลูกค้า Mac ของ github เลย เปลี่ยนมันและคุณสามารถใช้บรรทัดคำสั่งและเวอร์ชัน gui (ไคลเอนต์ของ github) ของ git ได้โดยไม่มีปัญหา
Kemal Dağ

1
set-urlช่วยฉันอีกครั้ง! ขอบคุณมาก !
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 ใช้ SSH แทน HTTPS เสมอเมื่อเชื่อมต่อกับ GitHub / BitBucket ดังนั้นคุณจะตรวจสอบสิทธิ์ตามใบรับรองเป็นค่าเริ่มต้นแทนที่จะได้รับพร้อมท์ให้ใส่รหัสผ่าน


4
ถ้าใครต้องการที่จะดูเรื่องนี้ขึ้นมาในเอกสารurl.<base>.insteadOfค้นหา

2
ระวังสิ่งนี้จะทำลายบางสิ่งบางอย่าง - ฉันสังเกตเห็นว่าบางฟังก์ชั่นของ homebrew หยุดทำงานหลังจากฉันทำการเปลี่ยนแปลงนี้ (เช่นการติดตั้งเวอร์ชัน / สาขาที่ไม่ใช่ค่าเริ่มต้น)
คำนำหน้า

1
สำหรับ gitlab: git config --global url.ssh: //git@gitlab.com/.insteadOf gitlab.com
MoOx

2
ฉันคิดว่าควรเป็น git config --global url.ssh: //git@github.com: .insteadOf github.comเพราะ github ชอบ git@github.com: <USERNAME> / <REPO> .git (แก้ไขgit config --global url.git@github.com:.insteadOf https://github.com/ได้ใน git 2.7.4 แน่นอน)
Glen Keane

1
เนื่องจากความคิดเห็นที่กล่าวถึงปัญหาเกี่ยวกับโฮมบรูก์อาจเป็นความคิดที่ดีที่จะลบ--globalและทำสิ่งนี้ตามพื้นฐานของ repo
Pylinux

58

การตอบสนองให้โดยเทรเวอร์ถูกต้อง

แต่นี่คือสิ่งที่คุณสามารถเพิ่มใน.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
ง่ายขึ้น +1
PiersyP

+1สำหรับเคล็ดลับนี้ ขอแนะนำโดยเคอร์เนล folks ดูที่git pullบนรายการส่งเมล newbies ของเคอร์เนล
jww

วิธีแก้ปัญหาที่สะอาดกว่า - และยอดเยี่ยมสำหรับโครงการgolangที่ค่าเริ่มต้น "go get" เป็น https และหนึ่งต้องการตั้ง urls เป็น ssh แทนเช่นสำหรับ repos ส่วนตัวเป็นต้น
colm.anseo

1
สำหรับ Gitlab: [url "ssh://git@gitlab.com/"] insteadOf = https://gitlab.com/นอกจากนี้ยังมีpushInsteadOfถ้าคุณต้องการที่จะส่งผลต่อการผลัก URL แต่ไม่ได้ดึง สามารถใช้git remote -vเพื่อตรวจสอบ URL ที่มีประสิทธิภาพ git กำลังจะถูกใช้
Beni Cherniavsky-Paskin

สิ่งนี้ใช้ไม่ได้อย่างน้อยสำหรับที่เก็บข้อมูลที่มีอยู่
Andrew Koster

4

คุณอาจโคลนที่เก็บโดยไม่ตั้งใจใน https แทน ssh ฉันทำผิดพลาดหลายครั้งใน GitHub นี้ ตรวจสอบให้แน่ใจว่าคุณคัดลอกลิงก์ ssh ตั้งแต่แรกเมื่อทำการโคลนนิ่งแทนที่จะเป็นลิงค์ https


จำเป็นต้องโคลนใหม่ด้วยลิงค์ ssh
codenamezero

คุณยังสามารถเปลี่ยนลิงก์ repo จาก HTTP เป็น SSH ดูคำตอบอื่น ๆ
Mike Lyons

3

คุณต้องโคลนใน ssh ไม่ได้อยู่ใน https

เพื่อที่คุณจะต้องตั้งค่าคีย์ ssh ของคุณ ฉันได้เตรียมสคริปต์เล็ก ๆ นี้ที่ทำให้สิ่งนี้เป็นแบบอัตโนมัติ:

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

และเรียกใช้เช่น

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

เปลี่ยน URL ระยะไกลของคุณ

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

เพิ่มเนื้อหาของ ~/.ssh/github.com_rsa.pubไปยังคีย์ ssh ของคุณบน github.com

ตรวจสอบการเชื่อมต่อ

ssh -T git@github.com

0

ไฟล์ 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

แก้ไข reponame / .git / config

[remote "origin"]
        url = git@github.com:username/repo.git
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.