Как мне получить git по умолчанию для ssh, а не https для новых репозиториев

В эти дни, когда я создаю новый репозиторий на 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 по умолчанию?

9 ответов

Решение

Настройте исходную ветку хранилища как 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

  • 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, так что вы будете аутентифицироваться по сертификату по умолчанию, вместо того, чтобы запрашивать пароль.

Ответ, предоставленный Тревором, является правильным.

Но вот что вы можете прямо добавить в свой .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/

Если вам нужно много ключей для разных хостов, сделайте это:

Создать скрипт

#!/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
        User git
    IdentitiesOnly yes
        IdentityFile $keypath
EOF
fi

и запустить его как

sh 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

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

Возможно, вы случайно клонировали хранилище в https вместо ssh. Я делал эту ошибку много раз на GitHub. Убедитесь, что вы копируете ссылку ssh в первую очередь при клонировании, а не ссылку https.

К вашему сведению — я использую это из-за того, что github больше не разрешает ssh:

      [url "git@github.com:"]
    insteadOf = https://github.com/
[url "git@gist.github.com:"]
    insteadOf = https://gist.github.com/

Если вы используете Gitlab

      git remote -v

вы можете увидеть что-то вроде

      https://gitlab.king.com/knight/squire.git 

просто замените короля, рыцаря, оруженосца своим. рыцарь/оруженосец - это то, как в нашем проекте есть разные каталоги, и вы можете перейти к ним.

      git remote set-url origin ssh://git@gitlab.king.com/knight/squire.git

git pull или что-то в этом роде и наслаждайтесь своим гением

В то время как другие ответы здесь прямо отвечают на главный вопрос (так, как я не знал, что это возможно! TIL что-то новое об! Об автоматическом превращении базирующихся пультов в git+ssh один, "нормальный" способ сделать это "правильно" с самого начала - не давать https URL.

Github.com (а также другие популярные службы хостинга git) почти всегда имеют маленькую кнопку, которая позволяет получить URL-адрес, gitследует клонировать. Вам просто нужно нажать маленькую кнопку «SSH», чтобы выбрать правильный метод:

Как вариант для нового проекта

Как только вы выберете опцию «SSH», github.com запомнит (пока вы вошли в систему) и по умолчанию установит последний выбранный вариант.

Другие вопросы по тегам