【问题标题】:How to make git describe use semver compatible tags only如何使 git describe 仅使用与 semver 兼容的标签
【发布时间】:2022-07-05 16:15:01
【问题描述】:

我希望我的 git describe 调用仅使用 refs 符合semantic versioning。 为简单起见,目前我不关心其他选项 (如仅带注释的标签、分支、候选...)。

例子:

我用1.1.1 标记了一个早期/旧提交(semver 兼容), 使用my-software-2.2.2 的更新提交, 还有一个更新的some-random-tag。 我希望我的 git describe 调用只考虑 1.1.1 标记。

这里的主要困难, 似乎是通过名称限制标签的方式是基于globs, 不是正则表达式。

【问题讨论】:

    标签: git glob semantic-versioning git-describe


    【解决方案1】:

    迄今为止我发现的最佳选择:

    git describe \
        --match='[0-9]*.[0-9]*.[0-9]*' \
        --exclude='*[^0-9.]*'
    

    因为--match 标志只支持原始glob, 不是完整的正则表达式, 此检查仅考虑 integer-dot-integer-dot-integer 形式的非常简单的 semver, 忽略其他有效的,例如:

    • 2.0.0-rc.2
    • 2.0.0-rc.1
    • 1.0.0-beta
    • 1.0.0-alpha+001
    • 1.0.0+20130313144700
    • 1.0.0-beta+exp.sha.5114f85
    • 1.0.0+21AF26D3—-117B344092BD

    【讨论】:

    • 另一种方法可能是,要获取所有标签的列表,使用 grep 使用官方 semver 正则表达式过滤它们,然后为每个此类标签调用 git describe 一次,逐字使用 --match,然后以某种方式找出哪些成功的调用给出了最合适的结果......:/
    【解决方案2】:

    另一种选择是使用(独立于核心 git)Go 工具: git-describe-semver.

    示例用法:

    cd my-git-directory
    docker pull ghcr.io/choffmeister/git-describe-semver:latest
    docker run --rm -v $PWD:/workdir ghcr.io/choffmeister/git-describe-semver:latest
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 2018-03-13
      • 2016-07-03
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      相关资源
      最近更新 更多