Git changelog: как получить все изменения до определенного тега? - PullRequest
23 голосов
/ 12 сентября 2011

Есть ли простой способ или команда, чтобы все git-коммиты попадали в определенный тег, чтобы автоматически генерировать журнал изменений для проекта? Я всегда помечаю свои репозитории git с номером версии, таким как v0.1.0, и, например, хотел бы, чтобы все коммиты до тега v0.1.0.

Я просмотрел документы, но, похоже, не нашел для него полезной опции или команды: http://git -scm.com / docs / git-log (в данный момент не работает кстати)

Например:

$ git log --oneline --decorate

Показывает теги рядом с коммитами. Я хотел бы то же самое, но только до определенного тега.

Ответы [ 8 ]

37 голосов
/ 12 сентября 2011

Вы можете просто сделать:

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
6 голосов
/ 09 января 2012

Для создания журнала изменений по тегам я использовал этот скрипт:

#!/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 голосов
/ 04 сентября 2013

Очень полезный камень, вывод записан в уценке, добавлена ​​поддержка выпусков и разделены коммиты по тегам

https://github.com/kebab-project/katip

3 голосов
/ 27 марта 2012

Обновление скрипта, предложенного 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
2 голосов
/ 01 марта 2018

Я придумал эту модификацию оригинального скрипта. Это правильно обрабатывает теги версий.

#!/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
2 голосов
/ 12 сентября 2011

Просто используйте имя тега в качестве спецификатора фиксации: git log --oneline --decorate v0.1.0

2 голосов
/ 12 сентября 2011

Просто добавьте tagname к вашей команде, и с вами все будет в порядке :) Мне нравится переключатель --graph для визуализации ветвей, которые привели к этому тегу:)

0 голосов
/ 30 мая 2019

Вы можете использовать Git Changelog Командная строка , чтобы сделать это:

npx git-changelog-command-line -std -tr v0.1.0 -tec "
# Changelog

Changelog for {{ownerName}} {{repoName}}.

{{#tags}}
## {{name}}
 {{#issues}}
  {{#hasIssue}}
   {{#hasLink}}
### {{name}} [{{issue}}]({{link}}) {{title}} {{#hasIssueType}} *{{issueType}}* {{/hasIssueType}} {{#hasLabels}} {{#labels}} *{{.}}* {{/labels}} {{/hasLabels}}
   {{/hasLink}}
   {{^hasLink}}
### {{name}} {{issue}} {{title}} {{#hasIssueType}} *{{issueType}}* {{/hasIssueType}} {{#hasLabels}} {{#labels}} *{{.}}* {{/labels}} {{/hasLabels}}
   {{/hasLink}}
  {{/hasIssue}}
  {{^hasIssue}}
### {{name}}
  {{/hasIssue}}

  {{#commits}}
**{{{messageTitle}}}**

{{#messageBodyItems}}
 * {{.}} 
{{/messageBodyItems}}

[{{hash}}](https://github.com/{{ownerName}}/{{repoName}}/commit/{{hash}}) {{authorName}} *{{commitTime}}*

  {{/commits}}

 {{/issues}}
{{/tags}}
"
...