自动 - 在将分支合并到 master 时增加 master 上的补丁版本
Auto - Increment patch version on master while merging branches to master
给定:
Bitbucket 存储库,以及 2 个开发人员,Steve 和 Bob,他们正在 2 个分支上工作,feature/alpha & feature/beta。在 master 分支和功能分支上,我们有一个带有版本的属性文件 - 比如说 8.3.0.
如何...
确保在 Bob 或 Steve 将他们的 pull request 合并到 master 之后 master 上的补丁版本增加了?即:
- 史蒂夫首先完成了他的 feature/alpha,他的拉取请求获得批准,当他将其合并为 master 时,master 上的版本变为 8.3.1。在 Bob 执行相同操作后 - 8.3.2.
寻找痛苦较小的解决方案。提前致谢!
更新 2020-12-07:
mnestorov 的回答经过一些修改后得到了预期的结果。不同之处在于我无权在服务器上添加预合并挂钩。如果有人遇到同样的问题 - 这是一个骇人听闻的收据:
- 创建一个预推送挂钩并将递增逻辑放在那里。
- 为 git 挂钩使用现有的 Maven 插件之一,并将创建的挂钩作为您的存储库的一部分。
通过这种方式,您将确保您的增量脚本将 运行 任何时候您的队友推动而无需请求 devops 的帮助:)
一种方法是创建一个 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 = \).*/'"$NEW_VERSION"'/' ~/service/version/file/txt
当然,我只是在猜测它可能是什么以及它如何能够自动提升您拥有的 sub-sub 版本。但它绝对可以自动化并计算如何增加一个数字,不管它是什么。
注意:这个钩子不接受任何参数,所以你不能给它传递版本号。
给定: Bitbucket 存储库,以及 2 个开发人员,Steve 和 Bob,他们正在 2 个分支上工作,feature/alpha & feature/beta。在 master 分支和功能分支上,我们有一个带有版本的属性文件 - 比如说 8.3.0.
如何... 确保在 Bob 或 Steve 将他们的 pull request 合并到 master 之后 master 上的补丁版本增加了?即:
- 史蒂夫首先完成了他的 feature/alpha,他的拉取请求获得批准,当他将其合并为 master 时,master 上的版本变为 8.3.1。在 Bob 执行相同操作后 - 8.3.2.
寻找痛苦较小的解决方案。提前致谢!
更新 2020-12-07:
mnestorov 的回答经过一些修改后得到了预期的结果。不同之处在于我无权在服务器上添加预合并挂钩。如果有人遇到同样的问题 - 这是一个骇人听闻的收据:
- 创建一个预推送挂钩并将递增逻辑放在那里。
- 为 git 挂钩使用现有的 Maven 插件之一,并将创建的挂钩作为您的存储库的一部分。
通过这种方式,您将确保您的增量脚本将 运行 任何时候您的队友推动而无需请求 devops 的帮助:)
一种方法是创建一个 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 = \).*/'"$NEW_VERSION"'/' ~/service/version/file/txt
当然,我只是在猜测它可能是什么以及它如何能够自动提升您拥有的 sub-sub 版本。但它绝对可以自动化并计算如何增加一个数字,不管它是什么。
注意:这个钩子不接受任何参数,所以你不能给它传递版本号。