Làm cách nào để git mặc định thành ssh chứ không phải https cho các kho lưu trữ mới


205

Những ngày này khi tôi tạo một kho lưu trữ mới trên GitHub trên trang thiết lập tôi nhận được:

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

Và bất cứ khi nào tôi phải thực hiện một cam kết, tôi cần nhập tên người dùng và mật khẩu GitHub của mình.

Tôi có thể tự thay đổi nó thành

git@github.com:nikhilbhardwaj/abc.git

trong .git/config. Tôi thấy điều này khá khó chịu - có một số cách tôi có thể định cấu hình git để sử dụng SSH theo mặc định?


Tôi nghĩ rằng câu trả lời của @ MoOx có lẽ phù hợp nhất với những gì bạn đang tìm kiếm. Thủ insteadOfthuật đã xuất hiện từ ít nhất năm 2012. Ngoài ra, hãy xem Cách chuyển đổi git:url sang http:url .
jww

Câu trả lời:


299

Thiết lập nhánh gốc của kho lưu trữ là SSH

Trang thiết lập kho lưu trữ GitHub chỉ là một danh sách các lệnh được đề xuất (và GitHub hiện đề xuất sử dụng giao thức HTTPS). Trừ khi bạn có quyền truy cập quản trị vào trang web của GitHub, tôi không biết cách nào để thay đổi các lệnh được đề xuất của họ.

Nếu bạn muốn sử dụng giao thức SSH, chỉ cần thêm một nhánh từ xa như vậy (nghĩa là sử dụng lệnh này thay cho lệnh được đề xuất của GitHub). Để sửa đổi một nhánh hiện có, xem phần tiếp theo.

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

Sửa đổi kho lưu trữ có sẵn

Như bạn đã biết, để chuyển đổi một kho lưu trữ có sẵn sang sử dụng SSH thay vì HTTPS, bạn có thể thay đổi url từ xa trong .git/configtệp của mình .

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

Một phím tắt là sử dụng set-urllệnh:

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

Thông tin thêm về chuyển đổi SSH-HTTPS


Cảm ơn, tôi không biết về việc họ biến https thông minh thành mặc định.
nikhil

3
Điều này có thể tốt cho người dùng Windows, nhưng trên Linux thì đó là một bước lùi: ssh luôn hoạt động và bộ đệm ẩn mật khẩu mới cho Smart HTTPS chỉ hoạt động trên Windows. Có một lưu ý về "Phiên bản Mac ở đâu?" nhưng không phải là một từ duy nhất cho người dùng linux.
MestreLion

Tôi nên nói thêm rằng, phương pháp này hoàn toàn không can thiệp vào máy khách mac của github. Thay đổi nó và bạn có thể sử dụng cả dòng lệnh và phiên bản gui (máy khách của github) của git mà không gặp vấn đề gì.
Kemal Dağ

1
Một lần nữa set-urlgiúp tôi với! Cảm ơn rất nhiều !
guozqzzu

181
  • GitHub

    git config --global url.ssh://git@github.com/.insteadOf https://github.com/
    
  • Cai Xô nhỏ

    git config --global url.ssh://git@bitbucket.org/.insteadOf https://bitbucket.org/
    

Điều đó nói với git luôn luôn sử dụng SSH thay vì HTTPS khi kết nối với GitHub / BitBucket, vì vậy bạn sẽ xác thực theo chứng chỉ theo mặc định, thay vì được nhắc nhập mật khẩu.


4
Nếu bất cứ ai muốn tìm kiếm điều này trong tài liệu , tìm kiếm url.<base>.insteadOf.

2
hãy cảnh giác điều này dường như phá vỡ một số thứ - Tôi đã nhận thấy một số chức năng của homebrew ngừng hoạt động sau khi tôi thực hiện thay đổi này (cụ thể là cài đặt các phiên bản / chi nhánh không mặc định)
Tiền tố

1
Đối với gitlab: git config --global url.ssh: //git@gitlab.com/.insteadOf gitlab.com
MoOx

2
Tôi nghĩ rằng đó phải là git config --global url.ssh: //git@github.com: .insteadOf github.com , bởi vì github thích git@github.com: <USERNAME> / <REPO> .git. (EDIT git config --global url.git@github.com:.insteadOf https://github.com/hoạt động trong git 2.7.4 chắc chắn.)
Glen Keane

1
Vì một bình luận ở đây đã đề cập đến các vấn đề về homebrew, nên có thể loại bỏ --globalvà thực hiện điều này trên cơ sở pr repo.
Pylinux

58

Các phản ứng cung cấp bởi Trevor là đúng .

Nhưng đây là những gì bạn có thể trực tiếp thêm vào .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
Đơn

+1 cho thủ thuật này. Nó cũng được đề nghị bởi các folks kernel. Cũng xem git kéo trên danh sách gửi thư của người mới.
jww

giải pháp sạch hơn nhiều - và tuyệt vời cho các dự án golang trong đó "đi lấy" mặc định thành https và người ta muốn đặt riêng các url thành ssh thay vì ví dụ cho các repos riêng, v.v.
colm.anseo

1
Đối với Gitlab: [url "ssh://git@gitlab.com/"] insteadOf = https://gitlab.com/Cũng có pushInsteadOfnếu bạn muốn ảnh hưởng đến URL đẩy nhưng không tìm nạp. Có thể sử dụng git remote -vđể kiểm tra URL hiệu quả git sẽ sử dụng.
Beni Cherniavsky-Paskin

Điều này không hoạt động, ít nhất là cho các kho lưu trữ hiện có.
Andrew Koster

4

Bạn có thể đã vô tình nhân bản kho lưu trữ trong https thay vì ssh. Tôi đã mắc lỗi này nhiều lần trên github. Đảm bảo rằng bạn sao chép liên kết ssh ở vị trí đầu tiên khi nhân bản, thay vì liên kết https.


Cần sao chép một cái mới với liên kết ssh
codenamezero

Bạn cũng có thể thay đổi liên kết repo từ HTTP sang SSH, xem các câu trả lời khác.
Mike Lyons

3

Bạn cần sao chép trong ssh không bằng https.

Cho rằng bạn cần phải thiết lập các phím ssh của bạn. Tôi đã chuẩn bị kịch bản nhỏ này tự động hóa điều này:

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

và chạy nó như thế nào

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

Thay đổi url từ xa của bạn

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

Thêm nội dung ~/.ssh/github.com_rsa.pubvào các khóa ssh của bạn trên github.com

Kiểm tra kết nối

ssh -T git@github.com

0

Tệp 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

Chỉnh sửa reponame / .git / config

[remote "origin"]
        url = git@github.com:username/repo.git
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.