Автор / коммиттер / квитанции / Sign-офф
Как регистрируются обзоры патчей, определяется каждым проектом. Git напрямую поддерживает только два предопределенных поля идентификации: Author и Committer. Ни один из них не подходит для маркировки отзывов / подтверждений. Git поддерживает дополнительные строки «Signed-by-by:», но это просто обычный текст в сообщении фиксации (в отличие от Author и Committer, которые управляются и назначаются значением Git).
Как и все части сообщений о коммитах, значение «Подписано:» зависит от каждого проекта. В проекте Git строки «Подписано:» означают что-то вроде «Я подтверждаю, что этот код совместим с лицензией этого проекта» (см. «Сертификат происхождения разработчика» в документе Git SubmittingPatches ). В проекте Git строки «Acked-by:» означают что-то вроде «Я рассмотрел это изменение, и оно кажется нормальным».
Типичный поток исправлений в проекте Git состоит в том, что участники генерируют подписанные исправления с git format-patch -s
и отправляют их в список рассылки проекта, где они собирают обсуждения и подтверждения (при необходимости). Как только патч готов к применению, сопровождающий применяет его после добавления своего собственного «Подписано:». Таким образом, сопровождающий всегда является коммиттером (за исключением некоторых подсистем, в которых фиксируются коммиты со слияниями из сопровождающих подсистем), но первоначальные участники по-прежнему остаются Авторами. Этот рабочий процесс может иметь или не иметь смысла в других проектах.
Итак, «Signed-by-by:» в вашем примере коммита на GitHub - это просто текст в конце сообщения коммита. Его точное значение - это то значение, которое проект присвоил таким линиям. Дополнительный идентификатор, показанный для этого коммита (помеченный как «(committer)» в представлении GitHub), связан с тем, что коммиттер отличается от автора. Это происходит, когда вы изменяете коммит (например, кончик ветви или во время перебазировки) или применяете патч, который содержит заголовок «From:», который отличается от настроенной вами личности. Чтобы изменить коммиттера, достаточно будет изменить коммит другого пользователя, добавив в него строку подтверждения или подтверждения (или исправить опечатку в сообщении коммита).
В общем, вам не следует беспокоиться о том, чтобы вставить свою личность в поле «Коммиттер». Вы можете обоснованно задуматься о том, чтобы каким-либо образом признать изменение, заключенное в коммите (например, сказать «я проверял это» или «я одобрил это»). То, как вы это сделаете, зависит от обычаев и политики рассматриваемого проекта. Часто такие подтверждения выполняются путем добавления строк «нижнего колонтитула» к сообщению фиксации.
Способы добавления Acks
Если в вашем проекте сервер «Signed-off-by:» имеет статус Acks, вы можете легко добавить его, изменив коммит с помощью git commit --amend -s
. В противном случае это будет означать внесение изменений в сообщение о коммитах, чтобы включить в него все, что подходит для вашего проекта.
Полностью сохраняемая история
Если сохранение исходной истории участника имеет жизненно важное значение в вашей ситуации, то вам, вероятно, следует использовать git pull --no-ff
и добавить свой «Ack» к сообщению фиксации результирующего коммита слияния. Поскольку вы не можете переписать, вам придется жить с любыми опечатками в сообщении фиксации. Для опечаток контента вы или исходный участник можете добавить коммит, который исправляет опечатку, либо до слияния, либо вы можете добавить исправление после слияния.
С исправлением содержимого после слияния:
git checkout <your-branch>
git pull --no-ff --no-commit <repo> <contributor's-branch>
git commit # add your "Ack", commit the merge
# fix content typo and stage it
git commit
Полное сохранение внесенной истории (с некоторыми дополнительными изменениями сверху)
С исправлением содержимого перед слиянием (или попросите участника сделать это в своем хранилище, затем потяните, как указано выше, пропуская последний этап исправления):
git fetch <repo> <contributor's-branch>:from-contributor
git checkout from-contributor
# fix content typo and stage it
git commit
git checkout <your-branch>
git merge --no-ff --no-commit from-contributor
git commit # add your Ack, commit the merge
Вы будете автором и коммиттером коммита слияния и коммитов фиксации. Автор и коммиттер из коммитов участника останутся без изменений.
Переписывание некоторой внесенной истории (но с сохранением исходной точки ветвления)
Если можно переписать историю, тогда вы можете сделать локДля того чтобы добавить ветку «Ack», исправьте опечатку, а затем добавьте ее в основную ветку.
.
git fetch <repo> <contributor's-branch>:from-contributor
git checkout from-contributor
git rebase -i HEAD~<N> # N is however many commits you have to go back to fix the typo
git checkout <your-branch>
git merge --no-ff --no-commit from-contributor
git commit # add your Ack, commit the merge
Вместо последнего git checkout <your-branch> && git merge --no-ff --no-commit && git commit
, вы можете добавить свой ack к соответствующим коммитам во время шага git rebase -i
, затем использовать git checkout <your-branch> && git merge from-contributor
, что может сделать ускоренную перемотку вперед, если наконечник <your-branch>
является предком from-contributor
.
Вы будете коммиттером любых измененных коммитов. Автор существующих коммитов останется без изменений, если вы не используете git commit --reset-author
. Вы будете автором и коммиттером любых новых коммитов (коммит слияния и фиксации).
Перезапись любой или всей внесенной истории
Если вы не хотите сохранять точку ветвления ветки участника, вы можете сделать это вместо этого:
git checkout <your-branch>
git pull --rebase <repo> <contributor's-branch>
git rebase -i HEAD~<N> # fix-up typo, add Ack
Автор и коммиттер будут такими же, как в приведенном выше сценарии ребаз + слияние.
Acking / Fixing Single Commit
Если вы имеете дело только с одним коммитом, git rebase -i HEAD~<N>
шаги, описанные выше, могут быть просто git commit --amend
.