自动 - 在将分支合并到 master 时增加 master 上的补丁版本

Posted

技术标签:

【中文标题】自动 - 在将分支合并到 master 时增加 master 上的补丁版本【英文标题】:Auto - Increment patch version on master while merging branches to master 【发布时间】:2021-03-09 10:19:26 【问题描述】:

鉴于: Bitbucket repo,以及 2 个开发人员,Steve 和 Bob,他们正在开发 2 个分支,feature/alpha 和 feature/beta。在主分支和功能分支上,我们有一个带有版本的属性文件 - 比如说 8.3.0。

如何... 确保在 Bob 或 Steve 将他们的 pull request 合并到 master 之后,master 上的补丁版本会增加?即:

史蒂夫首先完成了他的功能/alpha,他的拉取请求被批准,当他将它合并到 master 时,master 上的版本变为 8.3.1。在 Bob 做同样的事情之后 - 8.3.2。

寻找不那么痛苦的解决方案。提前谢谢!

2020 年 12 月 7 日更新:

mnestorov's 的回答经过一些修改导致了预期的结果。不同之处在于我无权在服务器上添加预合并挂钩。如果有人在同样的问题上苦苦挣扎 - 这是一个 hackish recepie:

创建一个 pre-push hook 并将增量逻辑放在那里。 为 git 挂钩使用现有的 maven 插件之一,并使创建的挂钩成为您的存储库的一部分。

通过这种方式,您将确保您的增量脚本将在您的队友推送时运行,而无需向 devops 寻求帮助:)

【问题讨论】:

【参考方案1】:

一种方法是创建一个 pre-merge-commit 挂钩并将其放置在您的 bitbucket 服务器上。

钩子可以测试很多东西,比如检查你正在合并的分支,但它也可以创建或附加指定版本的文件。基本上,它可以很简单:

假设您的version.txt 如下所示:

version = 8.3.0

然后你可以有类似的东西:

#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git merge" with no arguments.  The hook should
# exit with non-zero status after issuing an appropriate message to
# stderr if it wants to stop the merge commit.
#
# To enable this hook, rename this file to "pre-merge-commit".

echo "Bumping Service version"

OLD_VERSION=$(cat version.txt | grep -o "=.*" | tr -d '= ')
NEW_NUM=$(( $(echo $OLD_VERSION | grep -o "\.[0-9]*$" | tr -d ".") + 1 ))
LAST_NUM=$(echo $OLD_VERSION | grep -o "\.[0-9]*$" | tr -d ".")
NEW_VERSION=$(echo $OLD_VERSION | tr $LAST_NUM $NEW_NUM)

# More conversions to bump the version if needed
# more code code code
# ...

sed -i 's/\(^version = \).*/\1'"$NEW_VERSION"'/' ~/service/version/file/txt

当然,我只是在猜测它可能是什么,以及如何能够自动提升您拥有的 sub-sub 版本。但它绝对可以自动化并计算出如何提高数字,无论它是什么。

注意:这个钩子不接受任何参数,所以你不能给它传递版本号。

【讨论】:

NEW_VERSION=$(echo $OLD_VERSION... 错字:) 糟糕,我的错。固定! "... 并将其放在您的 bitbucket 服务器上"。等待。你能做到吗?您是否曾经在 bitbucket 服务器上实际放置过自定义 git 钩子(除了它通过 GUI 支持的 3 个钩子)?它是否按照您想要的方式工作?这可能会改变游戏规则。

以上是关于自动 - 在将分支合并到 master 时增加 master 上的补丁版本的主要内容,如果未能解决你的问题,请参考以下文章

git 把分支代码合并给master主分支

Github:当特定分支合并到主分支时,我如何通知松弛?

Git 在将两个分支合并到主(主)分支之前将一个开发人员分支合并到另一个开发人员分支

如何将分支合并到master?

合并分支,从dev到master

在 Artifactory Release Staging 之后使用 Jenkins 将 git develop 分支合并到 master