Вопрос или проблема
Я установил глобальную настройку Git commit.gpgsign = true
, чтобы автоматически подписывать коммиты, которые я делаю. Однако, когда я выполняю rebase или cherry-pick коммитов, кажется, что все они подписываются, даже если я не являюсь их автором.
Как я могу указать Git подписывать автоматически только те коммиты, которые написал я сам? (Я понимаю, что могу обрабатывать каждый коммит вручную, но не хочется выполнять специальные действия для каждого коммита, который я хочу или не хочу подписать.)
Я не уверен, что это возможно, но решение достаточно простое:
git config --global commit.gpgsign false
git rebase --exec 'git commit --amend --no-edit --no-signoff' master
git config --global commit.gpgsign true
.
Ответ или решение
Чтобы избежать подписания GPG чужих коммитов при использовании команды Git, необходимо тщательно настроить рабочий процесс, учитывая вашу текущую конфигурацию commit.gpgsign = true
, установленную в глобальном масштабе. Эта настройка приводит к автоматическому подписанию всех коммитов, включая те, которые вы не являетесь автором, особенно при выполнении операций, таких как ребейз (rebase) или черрипик (cherry-pick). Разберем, как это можно оптимизировать, чтобы подписывались только ваши собственные коммиты, избегая ручных действий для каждого отдельного случая.
Понимание проблемы
Когда вы выполняете ребейз или черрипик, Git воспринимает каждое изменение как новое, автоматически подписывая их за счет глобальной настройки. Это нежелательно, потому что вы тем самым подтверждаете подлинность коммитов, автором которых возможно не являетесь.
Решение
Для решения данной проблемы рассмотрим поэтапный подход, где использование git rebase --exec
поможет избежать автоматического подписания:
-
Отключение автоматического подписания:
Сначала отключите автоматическую подпись коммитов:git config --global commit.gpgsign false
-
Ребейз с применением дополнительной команды:
Используйте командуrebase
, добавляя--exec
, чтобы переписать коммиты без изменения их подписи:git rebase --exec 'git commit --amend --no-edit --no-signoff' master
Здесь
--amend --no-edit --no-signoff
сохраняет содержимое каждого коммита без повторного подписания. -
Возвращение настроек на место:
После завершения операции ребейзинга включите обратно автоматическую подпись:git config --global commit.gpgsign true
Заключение
Такой подход может эффективно предотвратить автоматическое подписывание чужих коммитов при сохранении удобства работы с автоматическими подписями для ваших собственных изменений. Вы не только избегаете повторного редактирования отдельных коммитов вручную, но и поддерживаете целостность истории разработки.
Это решение подходит профессионалам, которые стремятся оптимизировать процессы и минимизировать ручную работу в IT-сфере. Аналогично, важно соблюдать внимательность при выполнении операций над репозиториями, чтобы не вызвать ненужного роста их сложности.
Если вам регулярно требуется такая операция, можно создать скрипт, который будет автоматизировать и упростить этот процесс.