带有版本号的Git日志

时间:2018-09-11 11:51:23

标签: git jenkins logging

我正在尝试生成一个如下的自述文件:

not released yet
30c9474 myname 2018-08-23   Feature 1337

v1.0.76
420368f myname 2018-08-22   Changed Jenkinsfile.groovy again

v1.0.75
be05539 myname 2018-08-16   Feature 2833
838c158 myname 2018-08-16   Fixed bug 9128
6fa061a myname 2018-08-14   Feature 8832

v1.0.74
21903f2 myname 2018-08-11   Some stuff
57f1a2f myname 2018-08-05   Changed Jenkinsfile.groovy

这是我目前使用jenkins生成我的readmefile的方式:

node('master') {
    def artifactConfig = [
        version: '1.0.'+env.BUILD_NUMBER,
    ]

    try {
        // ######################################## Commit stage ######################################
        stage('Create Changelog stage') {
            // needs to be checked out again, because by default on master the sources are checkout out to ${WORKSPACE}@script in scripted pipeline
            checkout scm

            // the Changelog will be created here
            sh 'git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"%d%h%x09%an%x09%ad%x09%s" --date=short --all | sed "s/^ *([^)]*)/\\n&\\n/;1i (not released yet)" > releasenotes.md'

            sh 'git config --global --unset-all core.editor && git config --global core.editor $(which vim)'

            sh 'git add releasenotes.md &&' +
                'git tag -a version/' + artifactConfig.version + ' -m "Version version/' + artifactConfig.version + ' created" &&' +
                'git commit -C HEAD --amend --no-edit &&' +
                'git push -f origin version/' + artifactConfig.version
        }
    } catch (exception) {
        currentBuild.result = 'FAILED'
        throw exception
    }
}

这将在版本分支中创建自述文件。 我的问题是,我不知道如何将该文件放在一起作为示例。我只知道如何生成一个自述文件,如:

30c9474 myname 2018-08-23   Feature 1337
420368f myname 2018-08-22   Changed Jenkinsfile.groovy again
be05539 myname 2018-08-16   Feature 2833
838c158 myname 2018-08-16   Fixed bug 9128
6fa061a myname 2018-08-14   Feature 8832
21903f2 myname 2018-08-11   Some stuff
57f1a2f myname 2018-08-05   Changed Jenkinsfile.groovy

编辑: 这是我的网络图的样子: Network Graph 借助jthill,我将git日志行更改为:

sh 'git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"%h%x09%an%x09%ad%x09%s" --date=short | sed "s/^ *([^)]*)/\\n&\\n/;1i (not released yet)" > releasenotes.md'

但结果现在看起来像这样:

(not released yet)
30c9474 myname 2018-08-23   Feature 1337
420368f myname 2018-08-22   Changed Jenkinsfile.groovy again
be05539 myname 2018-08-16   Feature 2833
838c158 myname 2018-08-16   Fixed bug 9128
6fa061a myname 2018-08-14   Feature 8832
21903f2 myname 2018-08-11   Some stuff
57f1a2f myname 2018-08-05   Changed Jenkinsfile.groovy

看起来更好,但仍然不是我所需要的。

2 个答案:

答案 0 :(得分:1)

您可以按照所需的顺序获取所需的数据

@XmlMixed
private List<String >  freeText;

@XmlElement( name = "DAY" )
private List<ReceivedBaseDayInfo> diaList;

从那里开始,使用您喜欢的工具进行简单的文本搜索。如果您不需要的太漂亮,请通过管道

git log --date=short --pretty='%d%h %an %ad   %s'

会的。

答案 1 :(得分:1)

另一种方法是在 git log --format=... 本身中包含该标签/版本号。

Git 2.32(2021 年第二季度,7 年后)是可能的,“git log --format=...(man)“学习了“%(describe)”占位符.

参见 commit 9609972commit 273c990commit 09fe8ca(2021 年 2 月 28 日)和 commit b081547commit 15ae82d(2021 年 2 月 14 日)由 René Scharfe (rscharfe) .
(由 Junio C Hamano -- gitster --commit 25f9326 合并,2021 年 3 月 22 日)

<块引用>

pretty:添加 %(describe)

建议人:Eli Schwartz
签字人:René Scharfe

<块引用>

为描述输出添加格式占位符。

通过实际调用 git describe(man) 来实现,这很简单并且保证了正确性。
它旨在与具有 $Format:...$export-subst 属性的文件中的 git archive 一起使用。
它也可以与 git log(man) 等一起使用,即使由于每次提交的分叉,这会很慢。

还有:

<块引用>

pretty:向 %(describe)

添加合并和排除选项

签字人:René Scharfe

<块引用>

允许使用匹配和排除选项限制占位符 %(describe) 使用的标签。
例如
以下命令使用官方版本标签描述当前提交,不包括候选版本:

$ git log -1 --format='%(describe:match=v[0-9]*,exclude=*rc*)'

pretty-formats 现在包含在其 man page 中:

<块引用>

'%(describe[:options])':: 人类可读的名称,例如 git describe;空字符串 不可描述的提交。 describe 字符串 后面可以跟一个冒号和零个或多个 逗号分隔的选项。

  • 'match=<pattern>':只考虑匹配给定的标签 glob(7) 模式,不包括“refs/tags/”前缀。
  • 'exclude=<pattern>':不考虑匹配给定的标签 glob(7) 模式,不包括“refs/tags/”前缀。

警告:

<块引用>

pretty:文档多个 %(describe) 不一致

报告人:Ævar Arnfjörð Bjarmason
签字人:René Scharfe

<块引用>

使用单独的 git describe(man) 调用扩展每个 %(describe) 占位符。
它们的输出取决于当时存在的标签,因此没有一致性保证。
记录这个事实。

pretty-formats 现在包含在其 man page 中:

<块引用>

添加或删除标签时,描述可能不一致 同时。