.NET 主要版本和发布分支的 git 分支策略

2024-01-09

对于包含多个类库的 .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挑选提交到发布分支


管理分支策略的方法有很多很多。我认为出于您的目的,您可以通过几种方法来处理事情。

精挑细选:每当功能/错误修复进入主版本并应向后移植到现有版本时,明确地将更改选回相关分支。在此模型中,发布分支和主分支永远不会相互合并。这可以完全控制每个分支中最终发生的更改。一个风险是您忘记将更改挑选到所有相关版本中 - 您可能记得将其挑选到release/6.0,但忘记了release/7.0。

对最旧的受影响版本进行更改,然后向前合并:每当发布分支上需要错误修复/功能时,首先将更改合并到最旧的相关版本分支。然后将该发布分支合并到下一个发布分支(即将release/6.0合并到release/7.0)。最后将最新的release分支合并到master中。这避免了挑选,因此可能更简单。此外,很容易检查每个版本是否已完成所有所需的更改 - 每个版本应该在下一个版本之前进行 0 次提交。它的缺点是您必须提前决定要合并到的最旧版本。如果您后来决定要将更改合并到旧版本,那么您最终会挑选对旧版本的原始更改,然后从该版本合并到已经具有该更改的较新版本(因此合并提交为空) )纯粹是为了让所有版本 0 在下一个版本之前提交。值得注意的是,在此模型中,所有版本号更改都发生在 master 上,因此在采用发布分支后,您将立即增加 master 上的版本。

Gitflow 分支模型既有 master 又有开发,因此需要管理比当前更多的分支,因此对于您的需求来说可能过于复杂。

我建议的两种模型都允许您对 master 进行任意更改,因为您永远不会将 master 合并到任何发布分支中。

祝您选择适合您的分支策略。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 主要版本和发布分支的 git 分支策略 的相关文章

  • WUApiLib IUpdateInstaller2 产生错误;某些操作系统更新安装其他操作系统会抛出 HResult -2145124318

    更新是从本地服务器下载的 而不是从 WUS 或 Microsoft 存储库下载的 本地服务器基于 Linux 该主机包含每次更新的内容 我没有使用UpdateDownloader要从Microsoft服务器下载 我手动下载更新内容 然后使用
  • 为什么同时存在 System.Net.Http 和 System.Web.Http 命名空间?

    这只是一个简单的问题 因为我正在研究 NET 中可用的各种类库 我注意到有一个System Net Http命名空间和一个System Web Http命名空间 这两个命名空间都有什么用途 创建两个看似不明确的命名空间的动机是什么 是否有任
  • 无法通过 Git Bash 克隆 git 存储库

    在尝试使用克隆存储库时git clone 它显示以下错误 致命 无法访问 https github com microsoft c9 python getting started git https github com microsoft
  • CLR 2.0 与 4.0 性能比较?

    如果在 CLR 4 0 下运行 为 CLR 2 0 编译的 NET 程序会运行得更快吗 应用程序配置
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 仅使用 Git grep 的文件名

    我只想查看文本中包含特定单词的不同文件 current directory git grep word 显示文件中具有匹配单词的每一行 所以我尝试了这个 current directory git grep word files with
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • `git push` -- 没有输出,什么也没有发生

    touch test git add test git commit m test git push u origin master 这奏效了 该文件已上传到存储库 rm test cp R website website git rm t
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • WCF服务健康状况监控

    我刚刚实现了 WCF 服务 目前正在研究服务监控选项 我们的服务器团队目前仅托管 java 服务 希望我们的实例始终运行 因此它可以在该实例的生命周期内收集数据 他们表示将使用我们的 webmon 操作之一来获取统计信息 但我们正在使用每次
  • 如何使用 C# 连接到 Asana Rest API?

    有谁有使用 C 连接到 Asana API 的代码片段吗 他们的网站上有一个 Hello World 应用程序 但不幸的是它是用 ruby 编写的 https asana com developers documentation examp
  • 如果 async-await 不创建任何额外的线程,那么它如何使应用程序响应?

    一次又一次 我看到它说使用async await不创建任何额外的线程 这是没有意义的 因为计算机看起来一次做不止一件事的唯一方式是 实际上一次做不止一件事 并行执行 利用多个处理器 通过调度任务并在它们之间切换来模拟它 做一点A 一点B 一
  • 为什么 dotnet 的 char.IsLower() 是静态方法?

    这似乎违背了每一个设计准则 接受 T 类型的单个参数的静态方法通常应该只是一个成员方法 这太奇怪了我实际上不得不发布一个StackOverflow问题 https stackoverflow com questions 389100 is
  • 显示 master 之前/之后有多少提交分支的别名

    新的 Bitbucket Branches 页面非常棒 它显示每个分支领先 落后于 master 的提交数量 是否有显示相同信息的 Git 别名 信息应显示 分店名称 上次更新是什么时候 其背后有多少提交 有多少提交领先于 master 看
  • 访问 XAML 中的静态字段

    如何在 xaml 中引用类的静态属性 换句话说 我想做这样的事情 Class BaseThingy public static readonly Style BaseStyle
  • 除非我在项目目录中,否则 Git 不会显示日志

    我正在尝试打电话git log当我在不同的目录中时 我经过的位置 git is git log Users Leica proj1 但它说 不是 git repo 如果我cd进入这个目录 就可以正常工作了 cd Users Leica Pr
  • 用 C# 编写插件或插件框架

    我正在用 C 编写一个 Addin 框架 我想知道如何使 Addin 可以卸载而无需重新启动应用程序 我听说过 AppDomains 但是它们是如何工作的呢 外接程序是否可以添加可扩展性类并通过接口在主应用程序域中调用 并且仍然可卸载并调用
  • 什么是扩展方法?

    NET 中的扩展方法是什么 编辑 我已在以下位置发布了后续问题扩展方法的使用 https stackoverflow com questions 403619 usage of extension methods 扩展方法允许开发者向公众添
  • 具有子列表属性映射问题的自动映射器

    我有以下型号 Models public class Dish Required public Int64 ID get set Required public string Name get set Required public str
  • 部分共享git仓库

    我是 git 新手 我想知道是否支持以下场景 如果支持的话如何支持 即用于设置和更新的 git 命令 可以从三个不同的地方获取存储库 本地 镜像 和 github mirror 完全镜像 local github 镜像 local 但 受版

随机推荐