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 / 如何修补版本的主要内容,如果未能解决你的问题,请参考以下文章

如何 semver 版本控制文档更新?

如何在一个版本中使用 gitflow

如何在忽略 semver 的情况下安装 NPM 包?

如何根据提交历史自动检测下一个 semver 版本? (提交分析器的 CLI 替代方案)

发布后版本控制和 SemVer 2.0(语义版本控制)

GitVersion:如何通过提交消息回滚 SemVer 编号更改?