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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git changelog:如何将所有更改都添加到特定标记?相关的知识,希望对你有一定的参考价值。

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

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

例如:

$ git log --oneline --decorate

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

答案

你可以这样做:

git log --oneline --decorate v0.1.0

...显示每个提交,包括v0.1.0。当然,git log允许你限制以git rev-list理解的任何方式显示的提交,所以如果你只想看到v0.0.9v0.1.0之间的变化,你也可以这样做:

git log --oneline --decorate v0.0.9..v0.1.0

可能对此目的有用的替代输出是git shortlog,它对每个作者的贡献进行分组和总结。试试,例如:

git shortlog v0.1.0
另一答案

为了按标签创建更改日志,我使用了以下脚本:

#!/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
另一答案

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
另一答案

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

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

另一答案

只需将tagname附加到您的命令,你应该没问题:)我喜欢--graph开关来显示导致该标签的分支:)

另一答案

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

另一答案

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

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

以上是关于Git changelog:如何将所有更改都添加到特定标记?的主要内容,如果未能解决你的问题,请参考以下文章

将 Android 项目转移到 Git 私有服务器

如何在 Jenkins 电子邮件中包含 git changelog?

如何将文件添加到忽略列表中

Git将“未更改”文件添加到舞台

Git删除状态显示更改

Git 丢弃所有更改