Git добавить строку с выводом с использованием format.signoff не работает

Моя клиентская версия git - 1.7.0.4.

Я хочу автоматически добавить строку "Подключено" для коммиттера в конце сообщения журнала фиксации при фиксации сообщения.

  • Когда я устанавливаю git config --global format.signoff true и запускаю git commit -m "modify something", я не вижу "Signed-off-by" в git log.
  • Если я использую git commit -m -s "modify something", тогда "Подключено" отображается в git log.

Может ли кто-нибудь помочь?

Ответ 1

Обновление для Git 2.14.x/2.15: как я упоминал в "Git - обнаружение, если фиксация завершена программно, вы сможете для синтаксического анализа трейлета сообщения фиксации для строки Signed-off-By.

"git interpret-trailers" был изучен "--parse" и несколько других вариантов, чтобы упростить скриптам захватывать существующие строки трейлера из сообщения журнала фиксации.

Смотрите stefanct ответ для commit-msg на стороне клиента, который будет использовать git interpret-trailers.


Оригинальный ответ (2013)

format.signoff о патче (как показано, например, в этом патче):

format.signoff

Логическое значение, которое позволяет включить параметр -s/- signoff format-patch по умолчанию

Он не имеет отношения к git commit -s.

Другими словами, вам не нужно подписывать каждую фиксацию, но когда вы публикуете их как патч для использования другими (как в git: отправка патчей "), тогда вы должны подписать их.

Точное значение Signed-of-by см. в разделе Что такое функция выключения в Git для?".

Ответ 2

Вы можете подписать по умолчанию в проекте, создав файл (скажем, "~/MYPROJECT/git-template"), который содержит несколько пустых строк и подписанный текст, например:

Signed-off-by: Your Name <[email protected]>

Затем настройте git, чтобы использовать его в качестве шаблона коммита. Например:

git config commit.template ~/MYPROJECT/git-template

Удостоверьтесь, что ваш проект где-то документирован, что означает подпись для проекта. Вот текст, который вы можете скопировать в ваш файл CONTRIBUTING.md:

Все вклады (включая запросы на извлечение) должны соответствовать версии 1.1 Сертификата происхождения разработчика (DCO). Это точно то же самое, что было создано и использовано разработчиками ядра Linux и размещено на http://developercertificate.org/. Это сертификат разработчика, который он или она имеет право представить патч для включения в проект. Простая отправка материалов подразумевает это соглашение, однако, пожалуйста, включайте тег "Подписано" в каждом патче (этот тег является обычным способом подтверждения вашего согласия с DCO).

Ответ 3

Теперь существует простой способ автоматического выхода из любого коммита, который еще не был завершен, с помощью ловушек и команды git-interpret-trailers. В следующей версии 2.15 git команда позволяет тривиально проверить наличие подписи (независимо от ее значения/автора) и добавить свою, если ее еще нет. По состоянию на октябрь 2017 г. требуемого кода еще нет ни в одном выпуске git (но в его master ветке)!

Сохраните следующее как .git/hooks/prepare-commit-msg или .git/hooks/commit-msg (см. Здесь различия) и сделайте его исполняемым.

#!/bin/sh

NAME=$(git config user.name)
EMAIL=$(git config user.email)

if [ -z "$NAME" ]; then
    echo "empty git config user.name"
    exit 1
fi

if [ -z "$EMAIL" ]; then
    echo "empty git config user.email"
    exit 1
fi

git interpret-trailers --if-exists doNothing --trailer \
    "Signed-off-by: $NAME <$EMAIL>" \
    --in-place "$1"