Тур по Git
Продвинутый Git / Урок 5.12

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

Любой может установить user.name и user.email в конфигурации Git на любое значение. Подписанные коммиты используют криптографические ключи, чтобы доказать, что коммит действительно принадлежит тому, кем он себя выдаёт.

Зачем подписывать коммиты?

  • Верификация — доказать, что вы автор, а не кто-то, выдающий себя за вас
  • Доверие — мейнтейнеры могут проверить подлинность вкладов
  • Безопасность цепочки поставок — защита от несанкционированного внедрения кода
  • Соответствие требованиям — некоторые организации требуют подписанных коммитов для аудита

Как это работает

Когда вы подписываете коммит, Git создаёт криптографическую подпись с помощью вашего закрытого ключа. Любой, у кого есть ваш открытый ключ, может проверить, что подпись действительна и коммит не был изменён.

GPG-подпись

GPG (GNU Privacy Guard) — традиционный метод подписи коммитов.

Настройка

# Сгенерировать GPG-ключ
gpg --full-generate-key

# Список ваших ключей
gpg --list-secret-keys --keyid-format=long

# Указать Git, какой ключ использовать
git config --global user.signingkey YOUR_KEY_ID

# Включить подпись по умолчанию
git config --global commit.gpgsign true

Подпись коммита

# Подписать один коммит
git commit -S -m "Add new feature"

# С gpgsign=true все коммиты подписываются автоматически
git commit -m "Add new feature"

Подпись тега

# Создать подписанный тег
git tag -s v1.0.0 -m "Release 1.0.0"

# Проверить подписанный тег
git tag -v v1.0.0

SSH-подпись

Начиная с Git 2.34, вы можете использовать SSH-ключи для подписи — это проще, если у вас уже настроены SSH-ключи.

Настройка

# Указать Git использовать SSH для подписи
git config --global gpg.format ssh

# Указать путь к SSH-ключу
git config --global user.signingkey ~/.ssh/id_ed25519.pub

# Включить подпись по умолчанию
git config --global commit.gpgsign true

После этого git commit будет автоматически подписывать вашим SSH-ключом.

Проверка подписей

# Показать подписи в логе
git log --show-signature

# Проверить конкретный коммит
git verify-commit abc1234

# Проверить тег
git verify-tag v1.0.0

Вывод покажет, является ли подпись Good (действительный ключ, доверенный) или Bad (недействительный или недоверенный).

Значок «Verified» на GitHub

Когда вы отправляете подписанные коммиты на GitHub, рядом с коммитом отображается зелёный значок Verified. Для настройки:

  1. Сгенерируйте GPG- или SSH-ключ
  2. Добавьте открытый ключ в свой аккаунт GitHub (Settings > SSH and GPG keys)
  3. Подписывайте свои коммиты
  4. Отправьте — GitHub проверит подпись по загруженному ключу

GitHub также автоматически помечает коммиты, сделанные через веб-интерфейс, как «Verified».

GPG и SSH: сравнение

АспектGPGSSH
Сложность настройкиВыше — генерация ключей, модель доверияНиже — повторное использование существующих SSH-ключей
Управление ключамиОтдельная связка ключей GPGТе же SSH-ключи, что для аутентификации
Срок действия / отзывВстроенная поддержкаРучное управление
Требуемая версия GitЛюбая2.34+
Поддержка GitHubПолнаяПолная

Ключевые моменты

  • Подписанные коммиты криптографически доказывают авторство
  • Используйте GPG для полного управления ключами или SSH для простоты
  • git commit -S подписывает один коммит; commit.gpgsign true подписывает все коммиты
  • git log --show-signature показывает статус верификации
  • Добавьте открытый ключ на GitHub для получения значка «Verified»