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"