【发布时间】: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