按照项目上的 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.0
0.2.0-alpha.12
release/0.2.0
0.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 提交是完美的,我需要做一些人为的工作。