Как я могу создать собственный режим очистки для git? - PullRequest
3 голосов
/ 07 апреля 2010

Я хотел бы иметь очистку сообщения фиксации, которая не обязательно удалит строки, начинающиеся с # в самом сообщении. По умолчанию --cleanup=strip удаляет все строки, начинающиеся с символа #.

К сожалению, причина в том, что вики-форматировщик движка Trac использует хэши в начале блока кода для обозначения типа синтаксиса. Это создает трудности при использовании синтаксиса движка в моих сообщениях коммита.

Пример:

Created demo of perl added to helloworld.pl

{{{
#!/usr/bin/perl
use strict;
# say hi to the user.
print "hello world\n";

}}}

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD^1 <file>..." to unstage)
#
#   added:   helloworld.pl
# and so on and so forth...

Я хотел бы получить следующий результат в последнем зарегистрированном сообщении о фиксации:

commit 1234567890123456789012345678901234567890
Author: Danny <...>
Date:   Wed Apr 7 13:34:29 2010 -0400

     Created demo of perl added to helloworld.pl

     {{{
     #!/usr/bin/perl
     use strict;
     # say hi to the user.
     print "hello world\n";

     }}}

Я бы хотел использовать пользовательский фильтр, который удаляет все строки, начинающиеся с хэша, снизу вверх сообщения о фиксации. Оставляя строки в сообщении, я добавил в одиночку. Где или как я могу указать это в git?

Обратите внимание, что создание сценария sed или perl для выполнения операции не является проблемой, просто вопрос , куда его подключить в git - вопрос.

Приношу свои извинения за путаницу в моем вопросе, я не понял, насколько он расплывчатый.

1 Ответ

4 голосов
/ 07 апреля 2010

Я думаю, вы захотите использовать две вещи для достижения этой цели:

  • Укажите режим очистки. git commit принимает значение --cleanup=<mode>; вы можете использовать --cleanup=whitespace, чтобы git не удалял комментарии. Другой выбор, который вам может понадобиться, это дословно, что (удивление) не касается сообщения. См. справочную страницу для других вариантов, если вам интересно.

  • Используйте крюк commit-msg для редактирования сообщения на месте. В случае, если вы раньше не использовали ловушки, страница руководства называется githooks , и это сценарии, помещенные в .git/hooks, которые выполняются в соответствующее время. Хук commit-msg выполняется с одним аргументом, файлом, содержащим предлагаемое сообщение о коммите. Он может редактировать сообщение на месте, и если он возвращает ошибку (ненулевое), фиксация будет прервана. Итак, напишите свой собственный сценарий удаления как .git/hooks/commit-msg, убедитесь, что он исполняемый, и все будет готово. Обратите внимание, что каталог hooks не отслеживается; если вы хотите поделиться этим с другими, распространенный метод - разместить его где-нибудь внутри вашего хранилища, а затем символическую ссылку .git/hooks/commit-msg на него.

...