自动 - 在将分支合并到 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 在将两个分支合并到主(主)分支之前将一个开发人员分支合并到另一个开发人员分支
在 Artifactory Release Staging 之后使用 Jenkins 将 git develop 分支合并到 master