Some background:
Currently on CVS and looking to move to Git. We do planned releases for our complex custom internal platform every month or so.
In current development workflow, we have multiple branches, one for each of our planned release, such as an example:
- Release 7000, that will probably go out in May
- Release 7100, that will probably go out in August
- Release 7200, that will probably go out in September
(we can have half a dozen planned releases being worked on at the same time).
We also have named project branches, for larger projects that don't have a release date at the moment. They eventually get merged into a selected planned release branch, when the date becomes known.
Each release is quite large (many features), as releases require outages, we can't have them too often, we literally can get approval for release downtime once every month or so.
With this come merge conflicts. We have a CVS report that provides a list of manual merges that are to be done, and we split the work between a few developers. Any way to do the same with Git - to split up merge work for merge from one branch to another (resulting in many conflicts) between multiple developers?
EDIT:
This is what I ended up doing (note that we are using Atlassian Stash/BitBucket Server for pull request / code review):
- Merge daemon: Create a new "manual merges" branch from the target branch
- Merge daemon: Start merge to get list of conflicts
- Merge daemon: Notify managers and wait for conflict resolution
- Manager: Divide conflicts between developers
- Developers: Each developer creates and checks out "feature" branch from the merge branch, then start to merge source tag to their feature branch - they get the conflicts in their environment. They resolve conflicts only for the files they are responsible for, then do a soft reset to abort the merge, and commit only the files they resolved. Then they merge their feature branch (with review) to the "manual merges" branch.
- Merge daemon: Once conflicts have been resolved by developers, check out modified files from "manual merges" branch (only the files that changed). At this point all manual conflicts should be resolved. Commit and push.