对于包含多个类库的 .NET 项目,我当前使用以下 git 分支策略:
feature 1
+------------+
^/ \
master / v
----------+-+---+---------- PR ----+------+-----------
\ \ \ \
\ v release/7.0 \ v
\ +------------------ \ ----+--------- I branched from master and set the "version" to 7.0.0, 7.0.1, ... The aspnetcore package versions also point to 7.x.x
\ \
v release/6.0 v
+----------------------+------------- I branched from master and set the "version" to 6.0.0, 6.0.1, ... The aspnetcore package versions also point to 6.x.x
但是,这样做会阻止我在主分支上正确更新 .NET 版本,因为这些更改还需要合并到发布分支中。所以 master 分支总是会过时。
我读过有关 GitFlow 的内容,但我不清楚这如何解决主分支中的版本更改合并到所有发布分支的问题。
如果我使用源树 https://www.sourcetreeapp.com检查分支图ASP.NET核心 https://github.com/dotnet/aspnetcore,我看到main
分支实际上从未合并到release/6.0
and release/7.0
分支,但提交仍然最终在这些分支上:
The version https://github.com/dotnet/aspnetcore/blob/main/eng/Versions.props#L9被改变在main
分支到8
,但这些更改不会传播到其他发行分支。
我过去已经阅读过一些资源,但无法得到答案。
那么我该如何正确组织我的 git 存储库以便以正确的方式进行版本控制呢?
EDIT
看来对于angular https://github.com/angular/angular,主分支上的提交最终会出现在发布分支中,而不会实际合并它们。但我想知道他们是如何做到这一点的。提交时间戳相隔 2 秒,所以我认为他们不会手动挑选它
问题:
- 那么发布流程何时/何处替换
0.0.0-PLACEHOLDER
与实际版本,它来自哪里?另外,他们如何在该阶段映射相应的依赖版本?
- 是 Angular/asp.net core/... 使用git-flow?或者他们如何管理彼此相邻的多个主要版本?
- 版本号从哪里来?
在我看来,我必须更改主服务器上的版本(+依赖项的版本),并且标记合并到发布分支时要跳过的提交 https://stackoverflow.com/questions/727994/git-skipping-specific-commits-when-merging……但这可行吗?
EDIT 2
LinkedIn 发布了一条关于这一点,它指向一个应用程序来自动挑选并创建拉取请求。但 github 上似乎也有一些动作。
甚至谷歌也创建了一个github bot 创建拉取请求 https://github.com/apps/gcp-cherry-pick-bot挑选提交到发布分支