AFAIK, the Julia development is far, far simpler than that post. All core development happens on the master branch, which is periodically split off into releases branches for old releases and those branches are quasi-dead since they’re only updated for bug fixes.
Individual contributors with commit access create branches on GitHub when they want to show people their code, but those branches are just individuals’ development work and could easily live in forked repos if people were willing to put up with more tedium. People without commit access have to use forks and then provide PR’s because they, by definition, can’t change the main repo’s state without a PR.
Unless I’m missing something, that’s all there is to it. Even Google seems to use a similarly simple approach: https://arxiv.org/abs/1702.01715
In case that description is too complicated, here’s an even simpler version:
The official living codebase is master. To get new code into master, you have to submit a PR and get it reviewed.
The quasi-dead codebase for historical releases is on a set of release branches. Almost no contributors should ever be changing code on release branches and their existence is effectively irrelevant to normal people.
Individuals’ work happens on any other branch that’s not master or a release branch. You use a separate branch because you want to be free to do anything you want without review.