TFS2010 分支用于频繁发布和无限期维护

发布于 2025-01-08 20:01:22 字数 847 浏览 1 评论 0原文

我很难找出一个好的分支策略来轻松合并和跟踪我们环境中的更改集。

发布管理的快速总结如下:

我们有几个商业产品作为解决方案的一部分。不可改变的外部因素导致我们不得不无限期地维护软件的多个版本。发布过于频繁,通常是为了响应一系列增强功能或缺陷,并且时间表非常紧迫。仅修复错误的版本通常是在父版本分支中维护的点版本。具有新功能的版本通常会成为新版本/分支。

源代码控制树看起来像这样:

- trunk - dev
  - Product ABC
    - ABC 1.0
      -  ABC 1.0.1 (point release same branch)
    - ABC 2.0
  - Product XYZ
    - XYZ 1.0
    - XYZ 2.0

Dev 显然是我们的开发分支,预计不会稳定。通过同行评审的开发更改被提升到主干,我喜欢将其视为稳定但仍在开发的代码。当我们向主干添加新功能时(通常是为了响应客户项目),我们最终接近发布,我从主干分支到一个分支,如上面的“产品 ABC 2.0”。

当我们开始修复发布分支中的缺陷时,噩梦就发生了。我们希望将它们合并回主干,但它应该首先进入开发分支 - 然而,由于分支是从主干创建的,所以这是不可能的,除非我们进行无基础的合并回开发。同样,如果我们在开发中进行更改并将它们移动到主干中,并希望再次将它们合并到产品分支中,那么如果没有无根据的合并,这是不可能的。

这似乎是一个非常复杂的分支计划,我确信它是完全错误的,或者没有好的方法来使用我们的模型进行分支,以及我们为不同的客户做了和维护了多少个版本。

MS指南(甚至是高级高级计划)似乎是基于更简单的发布场景。我在这里缺少什么可以让我恢复理智的东西吗?

I am having trouble figuring out a good branching strategy that allows for easy merges and tracking of change sets in our environment.

The quick quick summary of the release management goes like this:

We have several commercial products as part of a solution. Unchangeable external factors result in our having to maintain multiple versions of the software indefinitely. Releases are way too frequent and usually in response to a list of enhancements or defects and on VERY aggressive schedules. Bugfix-only releases are usually point releases maintained in the parent release branch. Releases with new functionality usually become a new version/branch.

The source control tree looks like this:

- trunk - dev
  - Product ABC
    - ABC 1.0
      -  ABC 1.0.1 (point release same branch)
    - ABC 2.0
  - Product XYZ
    - XYZ 1.0
    - XYZ 2.0

Dev is obviously our development branch and is not expected to be stable. Dev changes that pass peer review are promoted to the trunk which I like to think of as stable but still development code. As we add new features to the trunk (usually in response to a customer project) we eventually get close to releasing and I branch off of the trunk into a branch like "Product ABC 2.0" above.

The nightmare develops when we start fixing defects in the release branch. We want to merge them back into the trunk but it should go into the dev branch first - however since the branch was created from the trunk this isn't possible unless we do a baseless merge back to dev. Likewise if we make changes in dev and move them into the trunk and want to merge those into a product branch again it isn't possible without a baseless merge.

This just seems to be such a convoluted branching plan that I'm convinced it's totally wrong or that there is no good way to branch with our model and how many releases we do and maintain for years for different customers.

The MS guidance (even the advanced advanced plan) seems to be based on simpler release scenarios. Is there anything I am missing here that would bring some sanity back?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

把人绕傻吧 2025-01-15 20:01:22

在看过许多分支策略之后,我最初的建议非常简单:

以尽可能简单的分支计划为目标。

换句话说,不要在没有充分理由的情况下使事情变得过于复杂。大多数团队都将合并视为一种痛苦,而这种感觉来之不易。

需要考虑的要点:

  • 版本发布后(通过 QA),发布分支将变为只读
    并已获准交付)
  • 限制创造新的
    分支机构。绝对需要时应创建新分支。
    原因可能是:主要版本、功能隔离、发布的客户
    版本、修补程序\补丁隔离
  • 尽可能使用标签而不是新分支。将功能合并到主\主干分支后,对其进行标记并禁止进一步签入它
    分支
  • 根据经验,只有积极开发的分支
    on 应该在线。通过删除来避免“僵尸”分支
    已合并且不活动的分支
  • 频繁合并
  • 使用 CI nightly builds 作为质量控制的第一线

您的场景可能介于 TFS 分支指南。然而,复杂的发展计划往往是多种多样的,因此在选择新策略时请自行判断。

在此处输入图像描述

Having seen many branching strategies, my initial advice is very straightforward:

Aim to the simplest branching plan as possible

In other words, don't over-complicate things without a good reason. Most teams treat merging as a pain and they've hard-earned that feeling.

Points to consider:

  • Release branches turn read-only once the version released (passed QA
    and had been green-lighted for delivery)
  • Be restrained on creating new
    branches. New branches should be created when absolutely required.
    Reasons may be: major version, feature isolation, released customer
    version, hotfix\patch isolation
  • Prefer labels instead of new branches when possible. Once a feature has been merged to the main\trunk branch, label it and disallow further check-ins to it
    branch
  • As a rule of thumb, only branches that are actively developed
    on should be online. Avoid "zombie" branches by removing
    branches that had been merged and inactive
  • Merge frequently
  • Use CI nightly builds as the first line of quality control

Your scenario is possibly somewhere in between scenario #3 (Branching and Labeling) and #4 (Multi Feature Teams) in the TFS Branching Guide. However, complex development plans tend to diverse so be your own judge when choosing a new strategy.

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文