Совсем недавно на GitHub появилась встроенная система проверки GPG-подписей коммитов в репозиториях, поэтому пришло время настроить автоматическую подпись при каждом коммите. В данном HOWTO мы рассмотрим как это сделать.
Создание ключей
Для включения GPG подписей в Git нам потребуется установленный консольный gpg2 (во всех популярных дистрибутивах GNU/Linux он уже установлен, а пользователям Microsoft Windows потребуется установить Gpg4Win).
Также нам необходимо сгенерировать или импортировать новую ключевую пару. Это можно сделать как в графическом режиме посредством менеджеров Kleopatra, GPA, KGpg и т.д., так и в консольном. Мы рассмотрим консольный вариант.
Генерируем новую ключевую пару:
gpg2 --full-gen-key
Укажем тот же адрес электронной почты, что и основной на GitHub. Рекомендуемая длина ключа — 4096 бит, а его тип — RSA и RSA. Следует придумать и задать сложный пароль для защиты закрытой части ключевой пары и хранить её максимально надёжно.
Теперь экспортируем открытый ключ созданной ключевой пары в файл:
gpg2 --armor --export [email protected] > ~/pubkey.asc
Здесь вместо [email protected] укажем адрес электронной почты, для которого мы генерировали ключевую пару. Результат окажется в файле pubkey.asc, расположенном в домашнем каталоге пользователя.
Загрузка ключей на GitHub
Итак, мы получили открытый ключ. Теперь нам необходимо загрузить его на GitHub, дабы система при помощи него могла проверять наши цифровые подписи.
Перейдём в модуль управления ключами настроек GitHub, нажмём кнопку New GPG Key и вставим содержимое файла pubkey.asc в появившуюся форму.
Если всё сделано верно, GitHub отобразит новый GPG ключ и сможет проверять подписи коммитов.
Сюда можно загрузить несколько GPG ключей например если мы будем подписывать разные проекты разными ключами.
Настройка Git
Теперь нам осталось только настроить клиент Git так, чтобы он знал какой ключ использовать для подписи и делал это всегда для любых коммитов. Пользователи Microsoft Windows должны вводить данные команды в Git Bash Shell.
Переключим Git на использование gpg2 вместо устаревшего gpg1:
git config --global gpg.program gpg2
Установим ключ по умолчанию, который будет использоваться для подписи (может быть переопределён для каждого конкретного репозитория):
git config --global user.signingkey D45AB90A
Здесь вместо D45AB90A укажем ID своего ключа. Получить ID всех закрытых ключей можно так:
gpg2 --list-secret-keys
Включаем обязательную подпись всех коммитов (это можно не делать, но тогда для добавления коммита с подписью придётся использовать git commit -S):
git config --global commit.gpgsign true
Теперь при создании нового коммита появится окно GPG Agent (пользователям Gpg4Win следует обязательно выбрать данный модуль при установке пакета) с требованием ввести пароль для закрытого ключа. Если он введён верно, коммит будет успешно подписан.
Если включена подпись всех коммитов, графические утилиты вроде TortoiseGit также будут поддерживать это.
Использую tortoisegit. Описанный способ будет работать?
Да, будет.