Here, the term of branch is understood as a git branch. I don’t know how branch works in other VCS, but its probably VCS-agnostic.
Given a branch base, and around it many other “satellites” branches, incarnation of optimizations, base_opt_1, base_opt_reducnode,…
Each optimization has its own branch, and touch many files in many different ways.
On a regular basis, the base branch is modified, and many optimizations have to be re-tested.
Thus, it is necessary to:
- switch to a particular branch
- use git rebase base (merge conflicts probable)
- launch unit tests
- switch to another branch
There is probably a way to automatise that using bash or VCS’s CLI.
- How git could answer that needs, for example by making sub-branches following automatically the super-branch?
- Is VCS the best tool to manage that architecture?
- How do proficients and providents programmers? If they don’t encounter that question, how they avoid it?
Git manages this very well. You can have as many branches as you like, tracking whatever parent branches you wish. They can be kept up to date with their parent branch by using git merge. When it comes time to pull the branches into the master branch, then some merging may be required. It may be automatically manged by git, but if there’s conflicts, then manual intervention will be required to resolve the conflicts to ensure that no changes are lost from the conflicting revisions. After that, you then do your release and begin again. However, merging and conflicts are something that should be managed and minimized by ensuring that people work on discreet bits of work where possible and keeping core work to a single lead developer. Best to avoid conflicts with tight communication, compartmentalization and communication, but sometimes they are unavoidable.