Как мне получить 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:URLs в http:URLs .
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.
Кемаль Дао

1
Снова set-urlпомогите мне! Большое спасибо !
guozqzzu

184
  • 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. (EDIT git config --global url.git@github.com:.insteadOf https://github.com/работает в git 2.7.4 точно.)
Глен Кин

1
Так как в комментарии здесь упоминаются проблемы с домашним пивом, было бы неплохо удалить --globalи сделать это на основе репо.
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 за этот трюк. Это также рекомендовано людьми ядра. Также смотрите git pull в списке рассылки новичков ядра.
jww

намного более чистое решение - и отлично подходит для проектов golang, где по умолчанию "go get" - https, и вместо него нужно индивидуально установить URL для ssh, например, для частных репозиториев и т. д.
colm.anseo

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

Вы также можете изменить ссылку репо с 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

Отредактируйте reponame / .git / config

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