1

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

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

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

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

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

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

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

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

如图:

$ 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 提交是完美的,我需要做一些人为的工作。

4

1 回答 1

1

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

  • 删除发布分支 HEAD 上的任何 alpha-tag
  • call gitversion,它应该返回正确的 beta 标记。

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

于 2022-01-06T00:56:49.250 回答