`prepare-commit-msg` - это Git хук, который срабатывает непосредственно перед тем, как Git откроет редактор для написания сообщения коммита. Это дает возможность автоматически изменить или дополнить сообщение коммита перед тем, как разработчик получит возможность его отредактировать.
Ключевые характеристики и области применения:
-
Местоположение: Хук находится в `.git/hooks/prepare-commit-msg` в репозитории.
-
Аргументы: Хук получает от Git следующие аргументы:
- `<имя файла сообщения коммита>`: Путь к временному файлу, содержащему сообщение коммита. Этот файл можно читать и изменять.
- `<источник коммита>`: Описание источника коммита (опционально). Может быть:
- `message`: если сообщение коммита было передано через командную строку (`git commit -m "..."`).
- `template`: если использовался шаблон сообщения коммита (`git commit -t`).
- `merge`: если выполняется слияние (merge).
- `squash`: если выполняется squash коммитов.
- `commit`: если выполняется `git commit --amend`.
- `<SHA1 коммита>`: SHA1 коммита (опционально). Присутствует, если источник коммита - `commit` и выполняется изменение существующего коммита (`git commit --amend`).
-
Назначение: Хук позволяет:
- Добавлять автоматически информацию в сообщение коммита (например, ID задачи из системы управления задачами).
- Форматировать сообщение коммита в соответствии с определенным стилем.
- Предотвратить коммиты с некорректными сообщениями, автоматически исправляя их или выдавая ошибку.
- Вставлять информацию из внешних источников, например, из базы данных.
-
Примеры использования:
- Автоматическое добавление ID задачи в начало сообщения коммита.
- Принудительное добавление префиксов к сообщениям коммитов в зависимости от типа изменений.
- Автоматическое создание шаблонного сообщения коммита с описанием изменений.
-
Возвращаемое значение: Если хук возвращает ненулевой код, коммит прерывается. Если возвращается 0, Git переходит к следующему шагу - открывает редактор (если необходимо).
В целом, `prepare-commit-msg` предоставляет мощный механизм для автоматизации и стандартизации сообщений коммитов, что способствует более понятному и организованному ведению истории изменений в репозитории.