Как я могу создать собственный режим очистки для git?

Я бы хотел очистить сообщение фиксации, которое не обязательно удалит строки, начинающиеся с # в самом сообщении. По умолчанию --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.

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


person Danny    schedule 07.04.2010    source источник
comment
@Danny: Я почти уверен, что вы задаете этот вопрос об очистке сообщения фиксации (о чем свидетельствует тег git-commit и ... встроенный в сообщение фиксации ...), но ваш пример не очень похож на зафиксировать сообщение, и вы указали нижнюю часть файла, а не нижнюю часть сообщения. Предполагая, что я правильно интерпретировал, вы можете расширить пример до полного сообщения о фиксации и немного уточнить формулировку.   -  person Cascabel    schedule 08.04.2010
comment
Вопрос относится к сообщению о фиксации, я попытался соответствующим образом его прояснить.   -  person Danny    schedule 08.04.2010
comment
для справки в будущем см. также Начать сообщение коммита git с хеш-меткой (# )   -  person wimh    schedule 12.12.2011


Ответы (1)


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

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

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

person Cascabel    schedule 07.04.2010
comment
Крючки не являются частью конфигурации. Если вы хотите разместить их в новых репозиториях, которые вы создаете, вы можете использовать параметр --template для git init и git clone. Это позволяет вам указать каталог шаблонов вместо общесистемного каталога по умолчанию; хуки по умолчанию все копируются из директории хуков каталога шаблона. (См. Справочную страницу git init kernel.org/pub /software/scm/git/docs/git-init.html) Вы также можете редактировать общесистемный шаблон (обычно в /usr/share/git-core/templates), если действительно хотите. - person Cascabel; 08.04.2010
comment
Чтобы упростить запоминание использования шаблона, вы можете поместить псевдонимы в свой .gitconfig - что-то вроде myinit = init --template=<template directory>. - person Cascabel; 08.04.2010
comment
Помимо использования псевдонима, есть ли способ установить режим очистки по умолчанию? Я просмотрел документацию безрезультатно. Я либо слепой, либо его просто нет в наличии - person Danny; 21.07.2010