Сводка коммитов текущего деплоя git

15.06.2021

Настроив деплой проекта из репозитория (например так) хочется чтобы приходили уведомления о совершенном деплое и чтобы все это было красиво оформленно. Для этого необходимо понять как выводить нужную информацию в промежутке между прошлым последним коммитом и текущим HEAD.

Вывод информации

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

•••
bash
git log --pretty=format:"%h - %an/%cn, %ar : %s" 506dca7 - Byurrer/Byurrer, 4 часа назад : adapted table names for tests edd43d0 - Byurrer/Byurrer, 7 часов назад : small fixeds 18575eb - Byurrer/Byurrer, 7 часов назад : added select db redis

Или так:

•••
bash
git log --pretty=oneline 506dca7724f2c94511f0128d34b57c919abd70f0 (HEAD -> dev, origin/dev) adapted table names for tests edd43d00722a835a6ec24df14c38e103894d4128 (master) small fixeds 18575eb3c91f6ac298b9a7e0113471f0f5ddff59 added select db redis

Теперь нужно выбрать коммиты, по которым будем показывать информацию. Это можно сделать так:

•••
bash
git log --pretty=format:'%h - %an/%cn, %ar : %s' from..to

Где [from, to] это коммиты от и до куда (включительно) нужно показать историю.

Поиск последнего коммита

Чтобы показать историю с прошлого коммита до самого свежего (задеплоенного), нужно перед принятием изменений из репозитория pull получить указатель на HEAD. Сделать это можно несколькими способами.

Получить полный SHA-1 хэш коммита:

•••
bash
git rev-parse HEAD edd43d00722a835a6ec24df14c38e103894d4128

Или так:

•••
bash
git log -n 1 --pretty=format:"%H" edd43d00722a835a6ec24df14c38e103894d4128

Получить короткий хэш:

•••
bash
git log -n 1 --pretty=format:"%h" edd43d0

Получить хэш последнего коммита в нужной ветке:

•••
bash
git show-ref --heads --hash master edd43d00722a835a6ec24df14c38e103894d4128

Итог

Теперь можно получить последний старый коммит, принять изменения и вывести форматированную историю изменений, которую вносит деплой:

•••
bash
OldCommit=$(git rev-parse HEAD) git pull git log --pretty=format:'%h - %an/%cn, %ar : %s' dev $OldCommit..HEAD

На почту/мессенджер приходит что-то типа такого:
•••
plaintext
myapp deployed edd43d0 - Byurrer/Byurrer, 3 hours ago : small fixeds 18575eb - Byurrer/Byurrer, 3 hours ago : added select db redis