Как автоматически генерировать сообщение

в некоторых (очень) редких случаях я делаю некоторые изменения в своем репозитории, которые настолько понятны, что сообщение фиксации, описывающее мои намерения, несколько бесполезно. В этих случаях я хотел бы, чтобы сообщение commit в основном просто перечисляло, какие файлы я добавил/удалил / отредактировал. Например:

добавил пес.h', ' cat.h'

сообщение ручной фиксации будет выглядеть как

добавлены заголовочные файлы

In в таких ситуациях было бы неплохо не писать сообщение фиксации, а создавать его автоматически.

Я знаю, что это очень плохая практика, но я бы использовал это только для непрофессиональных репозиториев, используемых для частных проектов. Я знаю, что это лениво, но мне любопытно, как это можно сделать. Сценарии оболочки Unix предпочтительны, но любое решение приветствуется.

Q: есть ли способ автоматически генерировать git commit сообщение, список файлов, которые были изменены?

3 ответов


если вы действительно ленивы, вы можете просто использовать следующее. Короче говоря, он делает git status распакуйте линии для new files, deleted, renamed и modified, и передать его в git commit

# LANG=C.UTF-8 or any UTF-8 English locale supported by your OS may be used
LANG=C git -c color.status=false status \
| sed -n -r -e '1,/Changes to be committed:/ d' \
            -e '1,1 d' \
            -e '/^Untracked files:/,$ d' \
            -e 's/^\s*//' \
            -e '/./p' \
| git commit -F -

настройки sed часть, чтобы настроить, как вы хотите, чтобы сообщение создавалось на основе результата git status

псевдоним его к чему-то короткому или сохраните его как скрипт (например,git-qcommit), так что вы можете использовать его как git qcommit

пример сообщения от git log

adrianshum:~/workspace/foo-git (master) $ git log
commit 78dfe945e8ad6421b4be74cbb8a00deb21477437
Author: adrianshum <foo@bar.com>
Date:   Wed Jan 27 01:53:45 2016 +0000

renamed:    bar.txt -> bar2.txt
modified:   foo.txt

редактировать: Изменен оригинал grep to sed чтобы сделать логику генерации сообщений фиксации более общей, включив строки между Changes to be committed и Untracked files, и произвести немного лучше выглядит сообщение)


Если вы не предоставляете сообщение (используя -m флаг), автоматически созданное сообщение будет открыто и попросит вас изменить его (если вам). Это выглядит так:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch <branch>
# Changes to be committed:
#       deleted:    <deleted files>
#       modified:   <modified files>
#
# Untracked files:
#       <untracked files>

Теперь вам просто нужно удалить # из строк, которые вы хотите вставить (скажем, измененные).

Я действительно отговариваю вас от этого, сообщения фиксации очень важны.

вопрос С другим (возможно, лучшим) подходом.


можно использовать commit -m команда для передачи любого сообщения в качестве сообщения фиксации.


другое решение-использовать параметр конфигурации шаблона для определения шаблона по умолчанию.

commit.template

здесь commit.template переменной конфигурации.

commit.шаблон

указать файл для использования в качестве шаблонов для новых сообщений.
"~/" есть расширено до значения $HOME и "~user / " в домашнем каталоге указанного пользователя.