We are currently working on a non open-source project, with a team of around 50 people, with an average of 20-30 daily commits. As some of these people are junior developers, we had to implement a system that didn't allow all of them to commit to our main repository.
Until now we were using SVN with this structure:
- trunk - Contained all the developers code
- branch - Contained all the validated code
From time to time, one of the senior developers "goes into" the trunk and merges it with the branch, rejecting all the non approved code (this would become crazy when there would be a lot of non approved code to revert). Finally, when the trunk only has approved code, there's a complete merge between the both.
Recently we started making some tests with Git and GitLab, to see if the Git approval system was worth the migration from SVN, to soften up all this merging madness.
At first it looked promising, but after a while we came to a disappointing conclusion that there was no magic formula. We created a protected master branch where only the senior developers would have access to push changes to, but then came the problematic part... the junior developers.
Maybe because we are so accustomed to the SVN way, the only solution that we found was to create a "junior branch", but this would basically mimic the behavior (and headaches) we already have with SVN.
Please tell me there's something that we are missing, or if we are handling the problem in the wrong way.
EDIT When I say approved code, I'm referring to validation for all the classes structure, correct objects instantiation... and not if the line breaks, tabs (and similar) are correct.