I am the technical director of a small company (6 developers). We are currently using SVN and are slowly porting to Git after all have received their training.
At the moment, our customers are the ones who trigger the integration of the branches. This means that a module or function is created and this function is then in a branch until the client asks if it should go live. When it goes live, we introduce the branch into a staging environment and run tests. Once the test confirms that everything is working as intended, these changes will be inserted into the trunk for live push.
This happens in this way because we often develop in parallel and the requirements are constantly changing. To isolate and control what goes where, we put each module or function into its own branch.
We have a long history of managing branch offices. For example, we can build a branch with Feature A. Six months will pass, and the customer or development manager wants to drive that change. if one of them remembers, Here is my problem. How can I track which branches have been merged? or not merged? A central way to keep track of all these changes.
This can be a management challenge, as I often have to lead project management, code, code review, and integration on multiple platforms as a lead in my organization. The leads here are not silos, we have to be part of the development everywhere. So often I have up to 7-10 different items on my ToDo list at any one time, and integration and store management can slip through the gaps.