Любой проект со временем обрастает десятками коммитов. Но превращать историю git log в читаемый changelog руками - занятие неблагодарное. Bash и git позволяют автоматизировать это в пару строк.
🛠 Базовый скрипт
#!/bin/bash
# gen-changelog.sh
OUTFILE="CHANGELOG.md"
{
echo "# Changelog"
echo
# Перебираем теги в обратном порядке
for tag in $(git tag --sort=-creatordate); do
prev=$(git describe --tags --abbrev=0 "$tag"^ 2>/dev/null || echo "")
echo "## $tag"
echo
if [[ -n "$prev" ]]; then
range="$prev..$tag"
else
range="$tag"
fi
git log --pretty=format:"- %s (%an)" "$range"
echo -e "\n"
done
} > "$OUTFILE"
echo "Changelog обновлен: $OUTFILE"
▪️ Пример вывода
# Changelog
## v2.2.0
- Добавлены новые баги (Ivan)
- Исправлен баг с путями (Anna)
## v2.1.0
- Рефакторинг логики загрузки (Ivan)
- Улучшена работа с сетью (Petr)
▪️ Можно также добавить:
📍добавить дату релиза: --date=short --pretty=format:"- %s (%an, %ad)";
📍разделить по типам коммитов (feat, fix, docs) с помощью grep;
📍генерировать changelog только для новых коммитов с последнего релиза.
BashTex 📱 #bash