Как сохранить фиксацию gpg-подписи после интерактивной перезагрузки?
Когда я хочу раздавить некоторые коммиты с помощью интерактивного rebase
:
git rebase -i HEAD~3
И затем:
pick cbd03e3 Final commit (signed)
s f522f5d bla-bla-bla (signed)
s 09a7b7c bla-bla (signed)
# Rebase c2e142e..09a7b7c onto c2e142e
...
Конечная фиксация не имеет подписи gpg, несмотря на то, что все эти коммиты имеют одну и ту же подпись. Возможно ли сохранить фиксацию gpg-сигнатуры после интерактивного сквоша переформатирования?
Ответы
Ответ 1
Как заявил Cupcake, вы не можете сохранить старую подпись из unsquashed commits, но вы можете подписать новый сжатый коммит, если вы пересоздаете вот так:
git rebase --interactive [email protected] HEAD~4
Добавление [email protected]
в качестве аргумента подпишет окончательный сжатый коммит.
Ответ 2
Не имеет смысла, что вы сможете. Весь смысл подписи gpg заключается в проверке того, что код не был подделан. Если бы вы могли сохранить подпись после изменения истории, это может победить целую цель.
В настоящее время я не подписываю код Git с gpg, поэтому я не знаю точных данных, но, я думаю, он, вероятно, хеширует конечный объект фиксации дерева. Когда вы буферизуете, как в вашем примере, Final commit
будет иметь другой идентификатор sha1, поэтому он не будет тем же объектом, что и до rebase, поэтому наличие такой же подписи gpg, вероятно, невозможно, и, как я уже сказал, это не сделает чувство.
Ответ 3
Чтобы усилить тот факт, что вы не сохраняете подпись на rebased commits, git 2.9.x + (Q3 2016) ясно укажет, что git pull --rebase
не будет проверять подпись (поскольку часть перебаза потеряла их)
См. commit c57e501 (20 мая 2016 г.) Александр Хирш (` `).
(слияние Junio C Hamano - gitster
- в commit 73bc4b4, 20 июня 2016 г.
pull
: предупредить --verify-signatures
с помощью --rebase
git-pull
молча игнорирует параметр --verify-signatures
, когда --rebase
, потенциально оставляя пользователей в убеждении, что операция rebase проверила бы действительные подписи GPG.
Реализация --verify-signatures
для git rebase
обсуждалась, но сомнения в действительном рабочем процессе возросли. Поскольку вы обычно сливаете других веток в ваш филиал, у вас может быть интерес, который их сторона имеет действительную подпись GPG.
Rebasing, с другой стороны, состоит в том, чтобы перестроить ветку поверх другую работу, чтобы вернуть результат назад, а уже слишком поздно отказаться от своей работы, даже если вы обнаружите, что их коммиты не приемлемы подпись.
Позвольте предупредить пользователей о том, что параметр --verify-signatures
игнорируется во время "pull --rebase
"; пользователи не задаются вопросом, что произойдет, если их коммиты не имеют приемлемой сигнатуры таким образом.