SemVer 和 GitFlow / 如何修补版本
Posted
技术标签:
【中文标题】SemVer 和 GitFlow / 如何修补版本【英文标题】:SemVer and GitFlow / How to patch a release 【发布时间】:2020-01-07 04:10:03 【问题描述】:我们正在尝试根据 semver 规范实现自动版本更新...理想情况下,我们会合并到 master 并在 CI 上生成新的版本更新。
--------------development branch----
/ \
--/--base branch------------------------v1.1.0------
我们还没有,由于一些发布周期的限制,我们正在使用 gitflow 方法:
--------------release branch/v1.1.x----
/
--/--base branch----v1.2+.x------
每次我们删减一个发布分支,比方说,我们发布一个次要/主要更新,我们必须保持该版本开放以允许热修复(只有补丁最终会在当前发布分支上).. .
现在,我们想让semver
很好地适应这个流程(我们目前无法更改)。
我们如何确保:
-
一旦我们删减了一个版本,那么基础分支上的以下提交至少会有一个小问题吗?
我们如何才能将发布分支上的修补程序带回 master?
【问题讨论】:
【参考方案1】:如果您使用conventional commits,您可以使用semantic-release、(可选)commitizen、(可选)commitlint、(可选)husky
基本上 master 分支可以是你的发布分支,所以任何登陆到 master 的提交都会触发语义发布,语义发布将查看自上一个版本以来的所有提交,看看它们是否需要发布/版本更新,如果他们这样做会为您创建版本。
请参阅https://medium.com/faun/automate-your-releases-versioning-and-release-notes-with-semantic-release-d5575b73d986了解有关如何设置的说明
【讨论】:
我们也使用常规提交,问题不在于how to generate releases or changelogs
,问题是如何在 gitflow 中使用 semver?
@Hitmands 你只需要确保你有一个发布分支,功能分支会被合并 --> 你触发发布并更新版本 --> 修补程序? --> 新补丁发布。【参考方案2】:
我发现的最佳解决方案是通过husky
使用post-commit 提示脚本。这具有很大的灵活性,同时提醒您的团队保持您的版本最新。
下面是我使用的脚本。
# .husky/_/post-commit
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
echo "Bump that version!"
exec < /dev/tty
PS3='Please enter your bump choice: '
options=("skip" "patch" "minor" "major")
select opt in "$options[@]"
do
case $opt in
"skip")
break
;;
"patch")
break
;;
"minor")
break
;;
"major")
break
;;
*) echo "invalid option $REPLY";;
esac
done
if [[ "$opt" == "skip" ]];
then
echo "✓ Skipping..."
else
echo " ✓ Bumping version by $opt"
yarn standard-version -r $opt
git push --no-verify --follow-tags origin main
fi
【讨论】:
以上是关于SemVer 和 GitFlow / 如何修补版本的主要内容,如果未能解决你的问题,请参考以下文章