Git авторизация для Visual Studio Code
Среда с интегрированной системой контроля версий.
Зачем?
В последнее время для всех сторонних проектов использую VSCode в купе с git. Мне очень нравится возможность иметь все инструменты под рукой и вести контроль версий не отрываясь от разработки. Единственной проблемой является то что Git всегда переспрашивает логин/пароль при работе с внешним репозиторием. Сделаем среду максимально удобной.
Для этого сгенерируем ключ для удаленного доступа, укажем его в настройках репозитория и укажем git’e где лежит ключ. Ключ состоит из двуха частей: публичной и приватной. Публичная загружается на удаленный сервер, приватная используется для авторизации. Из приватной можно восстановить публичную. Также ключ может содержать пароль (passphrase) для защиты от потери приватного ключа.
Первым делом придется разобраться с генерацией ключа. Для этого придется понять чем отличаются openssl openssh и puttygen.
Загружаем публичный ключ в репозиторий.
GitHub
Settings -> Deploy Keys -> Add deploy key
Вставляем имя и текст публичного ключа (он обычно начинается с ssh-rsa). Даем ключу права на запись (Allow write access). Сохраняем.
Добавляем приватный ключ
Linux
- Копируем приватный ключ.
- Приватный ключ должен лежать в папке
~/.ssh
. Именем по-умолчанию должно бытьid_rsa
. - Если ключей несколько используем
~/.ssh/config
файл.
- Приватный ключ должен лежать в папке
- Меняем git remote
- Переходим в папку репозитория.
- Посмотреть текущий внешний репозиторий:
git remote -v
- Сменить адрес репозитория на ssh:
git remote set-url origin git@github.com:[вставить url]
- Проверям пуш
git push origin
- Запустим VS Code и попробуем push
- Ctrl+Shift+P -> Push To
Будет запрошен пароль от сертификата. Если не хочется его вводить постоянно, можно создать сертификат без пароля.
Windows
Странный способ
- Запускаем Git Bash и повторяем пункты 1-3 из Linux инструкции. Папку
~/.ssh
придется создать. - Запустим VS Code и попробуем push
- Ctrl+Shift+P -> Push To
- Получаем ошибку.
- Вызываем
code
в git консоли.- Снова пробуем Push To и всё работает.
Я долго сравнивал переменные через printenv
, но мне это наскучило.
Впринципе можно всегда запускать так, но мне это не нравится.
Попробуем зайти с другой стороны. Используем Credential Manager встроенный в Windows.
Сменим git remote обратно на https либо не меняем его изначально.
Предпочтительный способ
- Прописываем в конфиг использование встроенного хранилища.
- Переходим в папку репозитория.
- Выполняем
git config --global credential.helper wincred
.
- Перезапускаем VS Code и пробуем Push To из VS Code.
- Вводим данные последний раз.
VS Code сохранит их во встроенном в Windows хранилище.
Выводы
- Для меня удобнее использовать ssh сертификат на Linux и wincred на Windows.
- Существует еще putty agent, но с ним еще больше возни.
- На OSX есть
osxkeychain
. На Linux тоже есть Credential Manager. - Разработка стала еще приятнее после того как я понял что могу коммитить нажав Ctrl+Enter в окне ввода сообщения к коммиту.