Как подписать коммиты в Git, если в репозитории включено требование GPG-подписи

Ответ

Если в репозитории требуется GPG-подпись коммитов, необходимо настроить Git для использования вашего GPG-ключа и добавлять флаг -S при коммите.

1. Настройка GPG-ключа в Git

Сначала укажите Git, какой ключ использовать. Узнайте ID вашего ключа (gpg --list-secret-keys) и выполните команду:

# Замените <KEY_ID> на ваш идентификатор ключа
git config --global user.signingkey <KEY_ID>

2. Подпись нового коммита

Используйте флаг -S для создания подписанного коммита:

git commit -S -m "feat: Add new feature with GPG signature"

3. Автоматическая подпись всех коммитов

Чтобы не добавлять флаг -S каждый раз, можно включить автоматическую подпись:

# Включить подпись для всех коммитов глобально
git config --global commit.gpgsign true

4. Подпись уже созданных, но не отправленных коммитов

Если вы забыли подписать последний коммит, используйте --amend:

# Переподписать последний коммит без изменения сообщения
git commit --amend -S --no-edit

Для переподписи нескольких последних коммитов используйте интерактивный rebase:

# Переподписать последние 3 коммита
git rebase -i HEAD~3 --exec "git commit --amend -S --no-edit"

После изменения истории коммитов (rebase, amend) для отправки на сервер может потребоваться принудительный push. Используйте --force-with-lease как более безопасную альтернативу --force:

git push --force-with-lease

Ответ 18+ 🔞

Да ты посмотри, какая хуйня! В репозитории требуют, чтобы коммиты были подписаны GPG-ключом. Ну, типа, для доверия, чтоб никто не подсунул левый код от твоего имени. Вообще, в принципе, логично, но возни, блядь, овердохуища.

1. Настройка GPG-ключа в Git

Первым делом, надо Git'у впарить твой ключ. Сначала узнай, какой у тебя ключ главный. Тыкай в консоль:

gpg --list-secret-keys

Там высунется какая-то хуйня вроде rsa4096/1A2B3C4D5E6F7890. Вот этот код после слеша — твой <KEY_ID>. Его и впихивай:

# Вместо <KEY_ID> — тот самый код, который только что увидел
git config --global user.signingkey <KEY_ID>

2. Подпись нового коммита

Теперь, когда делаешь коммит, надо добавить волшебную букву -S. Без неё — пизда, коммит будет обычным, и тебя наверняка заебут.

git commit -S -m "feat: Add new feature with GPG signature"

3. Автоматическая подпись всех коммитов

А если ты, как я, постоянно забываешь эту чёртову букву, можно настроить так, чтобы всё подписывалось само. Один раз настроил — и похуй.

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

4. Подпись уже созданных, но не отправленных коммитов

А вот это, сука, самый интересный момент! Допустим, накодил ты три коммита, уже всё готово к пушечку, а тут вспоминаешь — блядь, подпись же забыл! И что, всё заново? Не, есть способ.

Чтобы переподписать самый последний коммит:

# Переподписываем последний коммит, не трогая сообщение
git commit --amend -S --no-edit

А если надо переподписать не один, а несколько последних коммитов? Тут уже веселее, интерактивный rebase в помощь:

# Переподпишем последние 3 коммита
git rebase -i HEAD~3 --exec "git commit --amend -S --no-edit"

Только смотри, после таких манипуляций история меняется. Значит, простой git push уже не прокатит. Придётся пушить с силой. Но не с дикой, а с умной — --force-with-lease. Это как --force, но он тебя предупредит, если кто-то другой уже что-то залил в ту же ветку, пока ты тут со своей историей хуё-маё занимался.

git push --force-with-lease

Вот и вся магия. Вроде и не сложно, но пока настроишь — волнение ебать, терпения ноль ебать. Зато потом — красота, все коммиты с зелёной галочкой «Verified», и ты чувствуешь себя настоящим цифровым дворянином, блядь.