Skip to main content

Git Commit Style

За основу взято стиль повідомлень від розробників Angular:

https://github.com/angular/angular/blob/main/CONTRIBUTING.md

Повідомлення про фіксацію складається з теми, тіла та нижнього колонтитула, тіло є необов’язковими.

Тема — це один рядок, який найкраще підсумовує зміни, внесені в коміті.

Тіло використовується для надання більш детальної інформації щодо змін, внесених у коміті.

Текст нижнього колонтитула знаходиться безпосередньо під тілом і є місцем для посилання на задачу у JIRA. Тіло відокремлюється порожнім рядком і аналогічним чином нижній колонтитул відокремлюється від тіла порожнім рядком.

<Тема>
<Порожня строка>
<Тіло>
<Порожня строка>
<Нижній колонтитул>

Тема

<Тип>: <короткий підсумок>
│ │
│ └─⫸ Підсумок у теперішньому часі. Без великих літер. Немає точки в кінці.

└─⫸ Тип коміту: build|ci|docs|feat|fix|perf|refactor|test

Тип

Повинен бути одним із наступних:

  • build: Зміни, які впливають на білд або зовнішні залежності (npm - package.json)
  • ci: Зміни у gitlab-ci
  • docs: Зміни документації
  • feat: Новий функціонал
  • fix: Виправлення багу
  • perf: Код, що підвищує продуктивність
  • refactor: Зміна коду, яка не виправляє баги і не додає функціонал
  • test: Додавання відсутніх тестів або виправлення наявних тестів
Короткий підсумок

Використовуйте поле підсумку, щоб надати стислий опис зміни на англійській мові:

  • use the imperative, present tense: "change" not "changed" nor "changes"
  • don't capitalize the first letter
  • no dot (.) at the end

Тіло

Поясніть мотивацію зміни у тілі коміту. Це повідомлення має пояснити, чому ви вносите зміну. Ви можете включити порівняння попередньої поведінки з новою поведінкою, щоб проілюструвати вплив зміни.

Нижній колонтитул

Вказуємо номер задачі у Jira. Наразі підтримуються номери із двох Jira. Наприклад SOFTPRO-5158 EDESB-4219

Приклад

Із тілом

build: remove vulnerable packages

delete unused packages with security issues. update packages with security issues

**SOFTPRO-2222**

Без тіла

refactor: split zip filepath to 2 variables: rel and absolute

SOFTPRO-2222

!!! info

    Посилання на коміт відразу з'являється у вказаній задачі в JIRA.

ADMIN NOTES

Current code version

Перевірка здійснюється за допомогою pre-receive хука gitlab, що знаходиться за шляхом /var/opt/gitlab/git-data/repositories/. Some samples https://github.com/github/platform-samples/tree/master/pre-receive-hooks and https://git-scm.com/book/en/v2/Customizing-Git-An-Example-Git-Enforced-Policy

#!/bin/bash
#
# Reject pushes that contain commits with messages that do not adhere
# to the defined regex.

# This can be a useful pre-receive hook [1] if you want to ensure every
# commit is associated with a ticket ID.
#
# As an example this hook ensures that the commit message contains a
# JIRA issue formatted as [JIRA-<issue number>].
#
# [1] https://help.github.com/en/enterprise/user/articles/working-with-pre-receive-hooks
#

set -e

zero_commit='0000000000000000000000000000000000000000'
msg_regex='(?s)^(build|ci|docs|feat|fix|perf|refactor|test):\N{2,80}\n\n\N{0,200}\n?\n?(SOFTPRO|EDESB)-\d{1,10}\n'

while read -r oldrev newrev refname; do
# Branch or tag got deleted, ignore the push
[ "$newrev" = "$zero_commit" ] && continue

# Calculate range for new branch/updated branch
[ "$oldrev" = "$zero_commit" ] && range="$newrev" || range="$oldrev..$newrev"
for commit in $(git rev-list "$range" --not --all); do
if ! git log --max-count=1 --format=%B $commit | grep -qPzo "$msg_regex"; then
echo "ERROR:"
echo "ERROR: Your push was rejected because the commit"
echo "ERROR: $commit in ${refname#refs/heads/}"
echo "ERROR: do not match the regex: ${msg_regex}"
echo "ERROR:"
echo "ERROR: Please fix the commit message and push again."
echo "ERROR: https://help.github.com/en/articles/changing-a-commit-message"
echo "ERROR"
exit 1
fi
done
done