Включаем автоматическую подпись коммитов в Git

Совсем недавно на 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 также будут поддерживать это.

2 commentary to post

  1. Использую tortoisegit. Описанный способ будет работать?

Обсуждение закрыто.