skip to content
Архитектура в курилке

Подписываем коммиты и зачем оно надо

/ чтиво на 2 минуты

Содержание

Зачем оно надо

Мало кто задумывается о том, что Gitlab, Github, Gitea, Bitbucket и другие хабы для хранения исходников при отображении авторов коммитов опираются на два простых поля, которые Вы указывали, когда первый раз что-то пушили с новой тачки.

Terminal window
git config --global user.name "<Ваше имя>"
git config --global user.email "<Ваш email>"

И это нормально, ведь оно просто работает. При этом мало что мешает какому-то нехорошему человеку прикинуться Вами (ведь что имя, что email публичны и видны под каждым коммитом) или же кому-то пафосно заявить, что сам, ну скажем, Линус Торвальдс принимало участие в разработке форка is-odd для Rust-а.

Да и в целом хорошей практикой считается подписывать коммиты, ведь если Вы принимали участие в разработке какого-то большого Open Source-ного проекта, то наверняка сталкивались с этим.

Подписывание коммитов

В целом для любого хаба флоу примерно следующий:

  1. Сгенерировать ключ (SSH, GPG или еще какой поддерживаемый)
  1. Привязать его к Вашему аккаунту

  2. Настроить локальный git клиент для работы с конкретным ключом

  3. (Опционально) Настроить git, чтобы коммиты подписывались автоматически

Пробежимся вкратце по каждому из пунктов.

Генерация ключа

GPG

Ставим gpg и в терминале делаем:

Terminal window
gpg --full-generate-key

Далее в интерактивном режиме:

  • Выбираем тип ключа или же Enter, чтобы выбрать дефолтный

  • Указываем размер ключа или же Enter, для дефолтного

  • Указываем время жизни ключа или просто Enter, чтобы ключ не протухал

  • Вводим информацию о нас

  • Вводим секретную фразу для ключа или Enter, чтобы подпись работала без него

Готово! Ключ создан, теперь через gpg можно проверить, что он создан:

Terminal window
$ gpg --list-secret-keys --keyid-format=long
/home/anon/.gnupg/secring.gpg
------------------------------------
sec 4096R/3AA5C34371567BD2 2025-03-10 [expires: never]
uid Anon <anon@example.com>
ssb 4096R/4BB6D45482678BE3 2025-03-10

В данном примере нас интересует значение 3AA5C34371567BD2. Получим для этого ключа его публичную часть:

Terminal window
gpg --armor --export 3AA5C34371567BD2
# Prints the GPG key ID, in ASCII armor format

Можно копировать публичную часть ключа.

Привязка к аккаунту

Github

  1. На любой странице Github кликаем на фото профиля и выбираем значок с настройками Settings.

  2. В разделе Access находим GPG and SSH keys, переходим

  3. Пролистываем до раздела GPG keys и жмем New GPG key

  4. Даем ему имя, к примеру, имя устройства, к которому привязан этот ключ, копируем ключ из последнего шага и вставляем в поле. Жмем Add GPG key

  5. Все готово к работе! Ключ виден в списке и привязан к аккаунту.

Gitlab

TODO

Настройка git

Делаем после того, как сгенерировали ключ в пункте выше. Получаем список существующих ключей:

Terminal window
$ gpg --list-secret-keys --keyid-format=long
/home/anon/.gnupg/secring.gpg
------------------------------------
sec 4096R/3AA5C34371567BD2 2025-03-10 [expires: never]
uid Anon <anon@example.com>
ssb 4096R/4BB6D45482678BE3 2025-03-10

В данном примере будем использовать значение 3AA5C34371567BD2.

Указываем для конкретной репы этот ключ:

Terminal window
git config user.signingkey 3AA5C34371567BD2

или то же самое для всех репозиториев по умолчанию:

Terminal window
git config --global user.signingkey 3AA5C34371567BD2

Опционально Настраиваем git, чтобы все коммиты и теги подписывались нашей подписью:

Terminal window
# Коммиты
git config --global commit.gpgsign true
# Тэги
git config --global tag.gpgSign true

Заключение

В целом штука крайне необязательная, если Вы разрабатываете в одиночку, но сильно важная для крупных Open-source проектов. Я бы сказал, что можно настроить просто для общего развития.