Not a TFS specialist, but what I read is:
- Developers only need to check in once based on which release vehicle the change is for (i.e. Hotfixes go into the product
HOTFIX
branch).
- No need for baseless merges. Create a natural merge path back to
MAIN
by creating a hierarchal branch structure based on your release vehicles.
- Reduce risk of regressions. By creating a parent/child branch relationship between
MAIN->SP->
and HOTFIX
branches changes are naturally merged into future release (i.e. Hotfixes
merge into the SP
branch on their way to MAIN
) reducing risk of bug regressions in future releases.
After the release branches are created changes from MAIN
you should not merge (FI
) into the release branches.
Changes should merge – one way – from RELEASE
to MAIN
.
Also, changes should always merge through intermediate branches (i.e. RELEASE
-> HOTFIX
-> SERVICEPACK
-> MAIN
) to ensure that bug fixes remain consistent in subsequent releases.
I think that last section explicitly mentions how the workflow of merges should go once a version has been released into production.
It should go back to main until enough has been consolidated in order to create a new set of ship vehicles (from servicing, where you choose a version to start your new SPx, to Hoyfix.spx, to release.spx)
The OP user1448758 points out in the comment the article Where do I fix a production defect? which mentions:
The Release
branch is a child of the hotfix
or servicing
branch, rather than in a separate branching structure. This allows you to have multiple active release sets (consisting of Service
Pack, Hotfix
, Release
branches) for each of the minor or major releases you need to support in parallel.
The hotfix would be applied to the specific release the bug is found in, and then merged (RI) to Main
and possibly into vNext development branches.
Since the development branches are working on vNext
work after vCurrent
is released, I discourage you from fixing defects found in vCurrent
(post-release) in the vNext
development branch.
After you release Sprint 1
, you should fix defects (post-release) in Sprint 1
on the release
side, and fix bugs (pre-release) in Sprint 2 on the development
side (vNext
).
Release
is a child of hotfix
. At the time you create the release, the contents of hotfix
and release are the same.
Release
is made read-only and Hotfix
is available for making defect fixes against what was released.
The problem with inverting the structure, is you cannot move a hotfix
to Main
without going through Release
, and doing so means you no longer have a copy of the code as released.