The team I’m part of has recently run into issues using Git because we are accustomed to keeping separate code branches for each product version. Specifically, we have a 3.x branch and the latest 2.x branch. The 2.x is our next release, and 3.x is a planned version. 3.x is structured differently from 2.x, so there are many changes going into 2.x that won’t apply for 3.x. However, there are some lower-level changes to 2.x that we want to put in 3.x. The problem we’re encountering is that we can’t simply merge 2.x to 3.x, because of how dramatically different they are, and because most of the classes from 2.x have different functionality in 3.x.
This structure isn’t going well for us, but it seems to be working fine for UE4, so we figured we’d ask how UE4 makes it work so well. What are the use practices you use to keep your Git repository operating so smoothly when you have separate version branches?
Do you stop making changes to a branch when it is released, and then create your new version branch from the old? Once you’ve done this, is there some way you can propagate changes between the two versions (for example, merging a bug fix from 3.x to 2.x)?