We’re having some issues maintaining our UE4 fork due to the way that Epic manages their release branch. Epic doesn’t merge forward previous point releases until the next point release; preview releases have diverging histories which makes it difficult to prepare for the official release when it comes up. To illustrate, the simplified branch history for 4.13 and 4.14 looks something like this:
You should be able to see from the revision graph that 4.13.2-release is not merged up into any of the the 4.14 tags until 4.14.0-release. We would like to be able to do a preliminary merge when Epic releases a preview but with the current branching strategy that’s not feasible since that would require us to manually reconcile the changes that have taken place on either branch since they’ve diverged. For example, a merge from 4.14.3-release into 4.15.0-preview-1 results in around 200 conflicted files. The result is that we can’t do an effective merge until the day of the release unless we want to maintain a separate branch that merges Epic releases into Epic’s current development branch (we don’t). This puts us at a real disadvantage when trying to keep up with Epic’s release cycle.
I think it’s worth noting that Epic’s Wiki suggests that they are following the Gitflow branching model (see [“Recommended branching workflow”][2]). However, the Gitflow model recommends that changes to the release branch are merged back into the development branch but Epic does not seem to follow this practice. See [Atlassian’s description of Gitflow][3]: (emphasis mine)
Once develop has acquired enough features for a release (or a predetermined release date is approaching), you fork a release branch off of develop. Creating this branch starts the next release cycle, so no new features can be added after this point—only bug fixes, documentation generation, and other release-oriented tasks should go in this branch. Once it’s ready to ship, the release gets merged into master and tagged with a version number. In addition, it should be merged back into develop, which may have progressed since the release was initiated.
There a couple things that Epic could do to make this process easier:
- Merge point releases back into the development branch, as recommended by Gitflow.
- Merge preview releases into the release branch rather than tagging them to the development branch.
Is there anything aside from process changes on Epic’s side that would make this easier?