【问题标题】:Can gitversion be made to apply a unique tag to an existing tagged commit?可以使 gitversion 将唯一标记应用于现有的标记提交吗?
【发布时间】:2022-01-06 00:17:20
【问题描述】:

按照项目的gitflow分支模型,我的“开发分支”命名为dev,我的发布分支前缀为release/,我的“生产分支”为master

我们的 CI/CD 流程使用 gitversion 将 alpha 标记(例如 0.2.0-alpha.12)应用到 dev 分支的每个提交。

当我准备好发布时,我从 dev 分支上的所需提交创建发布分支,将其推送到远程,我们的 CI/CD 流程使用 gitversion将 beta 标记(例如 0.2.0-beta.1)应用于提交。

我们目前没有GitVersion.yml——下面的问题描述来自gitversion的默认行为。

问题:
gitversion 应用于具有现有标签的提交时,它会返回现有提交,而不是新提交。
例如。创建release/0.2.0 分支的dev 提交标记为0.2.0-alpha.12。当 gitversion 在新创建的release/0.2.0 分支上运行时,它返回的标记是0.2.0-alpha.12,而不是新的 beta-tag。

期望的结果:
gitversion 可以为带有现有标签的现有提交生成唯一标签。 例如。当 gitversion 在新创建的 release/0.2.0 分支上运行时,它返回的标签是 0.2.0-beta.1,无论提交是否已经用 0.2.0-alpha.12 进行了标签。

问题:
gitversion 是否可以配置为实现所需的结果,即如果在指向现有 alpha 标记提交的发布分支上运行,则生成新的 beta 标记? (我对 git 分支和标记有一个不错的 - 可能不是专家 - 理解:我知道在所描述的场景中,两个分支指向同一个提交)。

作为这个问题的上下文:我们的 CI/CD 流程依赖于 gitversion 输出的"SemVer" 元素来决定应用什么标签。当新推送的发布分支指向现有的开发分支提交(将具有现有的 alpha 标记)时,它会跳闸(或未实现所需的行为),因为 gitversion 生成的发布标记-branch 是现有的 alpha-tag,而不是所需的新 beta-tag。

如图:

$ git clone ssh://git@bitbucket.company.com:7999/prj/repo.git
$ git checkout dev
Switched to branch 'dev'
Your branch is up-to-date with 'origin/dev'.
$ git log --oneline -n 1 --decorate
0593fb2 (HEAD -> dev, tag: 0.2.0-alpha.12, origin/dev, release/0.2.0) A useful comment.
$ docker run -u $(id -u ${USER}):$(id -g ${USER}) --rm -v "$(pwd):/repo" artifactory.company.com/gitversion:5.7.1 /repo
{
...
  "SemVer": "0.2.0-alpha.12",
...
}
$ git checkout -b release/0.2.0
Switched to a new branch 'release/0.2.0'
$ docker run -u $(id -u ${USER}):$(id -g ${USER}) --rm -v "$(pwd):/repo" artifactory.company.com/gitversion:5.7.1 /repo
{
...
  "SemVer": "0.2.0-alpha.12",
...
}

我的尝试:
通常,我在新创建的发布分支上进行并提交更改,以便生成发布分支独有的新提交,然后在此提交上运行 gitversion。这会生成所需的 beta 标签。例如:

$ touch foo.bar && git add --all && git commit -m "wip" && git log --oneline -n 2 --decorate
[release/0.2.0 98435eb] wip
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo.bar
98435eb (HEAD -> release/0.2.0) wip
0593fb2 (tag: 0.2.0-alpha.12, origin/dev, dev) A useful comment.
$ docker run -u $(id -u ${USER}):$(id -g ${USER}) --rm -v "$(pwd):/repo" artifactory.company.com/gitversion:5.7.1 /repo
{
...
  "SemVer": "0.2.0-beta.1",
...
}

但是,这通常是不可取的,因为 dev-branch 提交是完美的,我需要做一些人为的工作。

【问题讨论】:

    标签: git git-flow semantic-versioning gitversion git-history


    【解决方案1】:

    考虑到Gitversion issue 没有提到这一点,我会确保 CICD 执行一个脚本,该脚本在其工作区(存储库被克隆的地方)中:

    • 删除发布分支 HEAD 上的任何 alpha 标记
    • 调用gitversion,它应该会返回正确的测试标签。

    这是一种解决方法,但至少不需要新的提交。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-29
      • 2011-07-19
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多