Як отримати git за замовчуванням для ssh, а не https для нових сховищ


205

У ці дні, коли я створюю нове сховище на 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

Відповіді:


299

Налаштуйте відділення походження сховища для 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).
Кемаль Даğ

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
будьте обережні, це, здається, порушує деякі речі - я помітив, що деякі функції домашнього перекладу перестали працювати після того, як я вніс цю зміну (а саме встановлення не / за замовчуванням версій / гілок)
Префікс

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. (EDIT git config --global url.git@github.com:.insteadOf https://github.com/працює точно в git 2.7.4.)
Глен Кін

1
Оскільки в коментарі тут згадуються проблеми з домашньою мовою, можливо, було б гарною ідеєю видалити --globalта зробити це на основі pr 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

For1 за цю хитрість. Його також рекомендують люди з ядра. Також дивіться витягнення git у списку розсилки новичок ядра.
jww

набагато більш чітке рішення - і чудово підходить для голанг- проектів, де за замовчуванням "переходьте" до https, і ви хочете індивідуально встановити URL-адреси на ssh, наприклад, для приватних
репостів

1
Для Gitlab: [url "ssh://git@gitlab.com/"] insteadOf = https://gitlab.com/Є також, pushInsteadOfякщо ви хочете впливати на push URL, але не отримати. Може використовувати git remote -vдля перевірки ефективних URL-адрес, які використовуватиме git.
Бені Чернявський-Паскін

Це не працює, принаймні для існуючих сховищ.
Андрій Костер

4

Можливо, ви випадково клонували сховище в https замість ssh. Я багато разів робив цю помилку на github. Переконайтеся, що ви скопіюєте ssh-посилання в першу чергу під час клонування, а не https-посилання.


Потрібно клонувати новий за допомогою ssh-посилання
codenamezero

Ви також можете змінити посилання repo з HTTP на SSH, дивіться інші відповіді.
Майк Ліонс

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

Редагувати ім'я / ім'я / .git / config

[remote "origin"]
        url = git@github.com:username/repo.git
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.