По умолчанию Git не проверяет, действительно ли имя и email автора коммита принадлежат реальному человеку. Любой может указать произвольные данные, что создаёт риск фальсификации истории изменений. В определённых случаях это позволяет выдать чужие коммиты за свои — например, с целью внедрения вредоносного кода.
Чтобы удостовериться, что коммиты действительно принадлежат доверенному автору, Git поддерживает их подпись с помощью GPG.
Визуально это выглядит так (скриншот с GitHub):
Подготовка
Сначала установите GPG для Windows — Gpg4win. При установке обязательно выберите компонент GPG Agent.
Создание ключей
Откройте терминал (PowerShell или Git Bash) и выполните:
gpg --full-generate-key
В терминале появится:
Please select what kind of key you want:
(1) RSA and RSA
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(9) ECC (sign and encrypt) *default*
(10) ECC (sign only)
(14) Existing key from card
Your selection? 1 # Выбираем RSA and RSA
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
Requested keysize is 4096 bits # Длина ключа 4096 бит
Key is valid for? (0) 1y # Срок действия — 1 год
Key expires at: ... # Подтверждаем
Real name: Alexei Chernyavsky # Имя как в GitHub
Email address: email@example.org
Comment: example.org
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O # Подтверждаем
После этого нужно ввести надёжный пароль для защиты закрытого ключа.
Чтобы увидеть идентификатор ключа (Key ID), используйте:
gpg --list-secret-keys --keyid-format LONG
Пример вывода:
sec rsa4096/98F2EBC6C153DED5E26D579E9B1CACC547A80702 2025-07-19 [SC]
uid [ultimate] Alexei Chernyavsky (example.org) <email@example.org>
ssb rsa4096/7C7183969D84B1A3 2025-07-19 [E]
Скопируйте длинный идентификатор ключа после rsa4096/
— он понадобится для настройки Git
Экспорт открытого ключа
Теперь экспортируем открытую часть ключа в файл:
gpg --armor --export email@example.org > ./pubkey_email_example_org.asc
Замените email@example.org
на ваш адрес. В результате публичный gpg ключ сохраниться в файл pubkey_email_example_org.asc
.
Загрузка ключа на GitHub
Перейдите в настройки GPG-ключей GitHub, нажмите New GPG Key и вставьте содержимое файла pubkey_email_example_org.asc
.
В заголовке (Title) можно указать email или описание ключа.
Если всё сделано верно, GitHub отобразит новый ключ и начнёт проверять подписи коммитов.
Можно загрузить несколько ключей, если вы используете разные ключи для разных проектов.
Настройка Git
Указываем путь к GPG:
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
Устанавливаем ключ для подписи для профиля по умолчанию (здесь замените идентификатор 98F2EBC6C153DED5E26D579E9B1CACC547A80702
на свой, который скопировали ранее):
git config --global user.signingkey 98F2EBC6C153DED5E26D579E9B1CACC547A80702
Включаем автоматическую подпись всех коммитов:
git config --global commit.gpgsign true
Теперь при создании коммита Git будет подписывать его с помощью GPG. При этом откроется окно, в котором нужно будет ввести пароль к закрытому ключу.
В результате выполнения этих комманд в файле .gitconfig
появятся строки:
[user]
signingkey = 98F2EBC6C153DED5E26D579E9B1CACC547A80702
[commit]
gpgsign = true
[gpg]
program = C:\\Program Files (x86)\\GnuPG\\bin\\gpg.exe
Проверка подписи
Проверить, что коммит подписан, можно командой:
git log --show-signature
Git выведет информацию о том, был ли коммит подписан и каким ключом.