Git changelog: как получить все изменения до определенного тега?
Есть ли простой способ или команда, чтобы все git связывались с определенным тегом для создания автоматического журнала изменений для проекта? Я всегда помещаю свои репозитории git с номером версии, например v0.1.0
, и, например, хотел бы, чтобы все транзакции отмечали v0.1.0
.
Я просмотрел документы, но, похоже, не нашел для него полезного варианта или команды: http://git-scm.com/docs/git-log (на данный момент способ)
Например:
$ git log --oneline --decorate
Показывает теги рядом с фиксациями. Я хотел бы то же самое, но только до определенного тега.
Ответы
Ответ 1
Вы можете просто сделать:
git log --oneline --decorate v0.1.0
..., чтобы показать каждую фиксацию до и включая v0.1.0. Конечно, git log
позволяет также ограничивать коммиты, показанные любым способом, который понимает git rev-list
, поэтому, если вы хотите видеть изменения между v0.0.9
и v0.1.0
, вы также можете:
git log --oneline --decorate v0.0.9..v0.1.0
Альтернативный вывод, который может быть полезен для этой цели, - это git shortlog
, который группирует и суммирует вклады каждого автора. Попробуйте, например:
git shortlog v0.1.0
Ответ 2
Для создания журнала изменений по тегам я использовал этот script:
#!/bin/bash
# Author:Andrey Nikishaev
echo "CHANGELOG"
echo ----------------------
git tag -l | sort -u -r | while read TAG ; do
echo
if [ $NEXT ];then
echo [$NEXT]
else
echo "[Current]"
fi
GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT
NEXT=$TAG
done
FIRST=$(git tag -l | head -1)
echo
echo [$FIRST]
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST
Ответ 3
Обновление для script, предложенное Creotiv для лучшей сортировки тегов
#!/bin/bash
# Author:Andrey Nikishaev, Gunnar Lindholm
echo "CHANGELOG"
echo ----------------------
git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags |tac |grep -v '^$' | while read TAG ; do
echo
if [ $NEXT ];then
echo [$NEXT]
else
echo "[Current]"
fi
GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT
NEXT=$TAG
done
FIRST=$(git tag -l | head -1)
echo
echo [$FIRST]
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST
Ответ 4
Существует очень полезный камень, вывод написан в методе уценки, добавление поддержки проблемы и раздельные коммиты по тегам
https://github.com/kebab-project/katip
Ответ 5
Просто добавьте tagname
к вашей команде, и вы должны быть в порядке:) Мне нравится переключатель --graph
для визуализации ветвей, которые привели к этому тегу:)
Ответ 6
Просто используйте имя тега в качестве спецификатора фиксации: git log --oneline --decorate v0.1.0
Ответ 7
Я придумал эту модификацию оригинала script. Это правильно обрабатывает теги версии.
#!/bin/bash
# Author:Andrey Nikishaev
echo "CHANGELOG"
echo ----------------------
git tag -l --sort=v:refname | tac | while read TAG ; do
echo
if [ $NEXT ];then
echo [$NEXT]
else
echo "[Current]"
fi
GIT_PAGER=cat git log --no-merges --format=" * %s" $TAG..$NEXT
NEXT=$TAG
done
FIRST=$(git tag -l --sort=v:refname | head -1)
echo
echo [$FIRST]
GIT_PAGER=cat git log --no-merges --format=" * %s" $FIRST