Hello Pablo,
It makes sense to have branches rely on change sets. An unfortunate, but reasonable requirement.
" you can play with permissions to deny people creating child branches, or you can create triggers to control the branch hierarchy "
Thank you for pointing out that there are permission options, I didn't realize you could customize the access options like that on branches. I also found a configuration option in the display options where I could uncheck "display full branch names" and I also found the vertical display option for branches. Its nice to see the client and server are flexible. So I'm sure I'll find a combination of display and permission options to get the repo into the state I want.
"That being said: do you have a Perforce background? "
No. I have a background in Git, SVN, TFS, and CVS (way back in the day).
"And, why do you need this complex branch hierarchy? Have you read about our recommended branching pattern?"
Not in detail, but from a high level it looks like the cactus branching strategy? The company I work for follows a modified version of Git Flow where we create a branch per task/feature (we work to make these changes small per branch and we keep the branches around) and then merge these branches into develop once they've been reviewed. The master branch holds releases. If a release needs to be modified, then we create a branch off the commit from Master to hold just those changes and treat it like its own "develop" branch. Its probably not all that different from what you recommend. However. we do a release every 1 to 2 years. I'd love to release more frequently, but the regulatory environment I work in prevents that.
Regards,
Aaron