Git changelog:如何将所有更改都添加到特定标记?

时间:2011-09-12 12:10:16

标签: git logging changelog

是否有一种简单的方法或命令可以将所有git提交到特定标记以生成项目的自动更改日志?我总是使用版本号v0.1.0标记我的git repos,例如,我希望所有提交都标记为v0.1.0

我查看了文档,但似乎没有找到有用的选项或命令:http://git-scm.com/docs/git-log(顺便说一句,顺便说一下)

例如:

$ git log --oneline --decorate

显示提交旁边的标记。我想要一样,但只有特定的标签。

9 个答案:

答案 0 :(得分:37)

你可以这样做:

git log --oneline --decorate v0.1.0

...显示每次提交,包括v0.1.0。当然,git log允许您限制以git rev-list理解的任何方式显示的提交,因此,如果您只想查看v0.0.9和{{1}之间的更改你也可以这样做:

v0.1.0

可能对此目的有用的替代输出是git log --oneline --decorate v0.0.9..v0.1.0 的替代输出,它对每个作者的贡献进行分组和总结。试试,例如:

git shortlog

答案 1 :(得分:6)

为了按标签创建更新日志,我使用了这个脚本:

#!/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

答案 2 :(得分:3)

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

答案 3 :(得分:3)

有一个非常有用的gem,输出是用markdown编写的,添加问题支持和按标签拆分提交

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

答案 4 :(得分:2)

只需将 tagname 附加到您的命令就可以了:)我喜欢--graph开关来显示导致该标记的分支:)

答案 5 :(得分:2)

只需使用标记名称作为提交说明符:git log --oneline --decorate v0.1.0

答案 6 :(得分:2)

我想出了原始脚本的这个修改。这会正确处理版本标记。

#!/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

答案 7 :(得分:0)

您可以使用Git Changelog Command Line进行此操作:

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}}
"

答案 8 :(得分:0)

使用https://pypi.org/project/changelogfromtags/

pip install changelogfromtags && changelogfromtags