- **Main (main)** is the default branch available in the Git repository for the `current` release. Current SDK release is `v3.x`. This branch should be stable all the time and won’t allow any direct check-in. You can only merge it after code review. All team members are responsible for keeping the main stable and up-to-date.
- **Development (dev)** is the main development branch for the next major release `v4.x`. The dev branch’s idea is to make changes in it and restrict the developers from making any changes in the main branch directly. Changes in the dev branch undergo reviews. When ready, the branch will be fully promoted to `main`.
- **Master (master)** is the copy of `main` branch created after migration of original `master` branch to `main` branch. The branch is temporarily created to ensure that builds for projects using this repo in their CI pipeline doesn't start breaking immediately after migration. This newly created copy is locked against any new commits, and would be deleted in future once all the teams hae migrated their CI pipelines to build from `main`.
All of the existing tests are enabled on both `main` and `dev` branches. While implementing any refactoring changes, please adjust all tests accordingly.
While the `main` branch contains linear history of all releases and associated git tags, it may be practical to branch-off specific releases for use in concrete products.
Continuous Integration is enabled on `release/*` branches.
## Compilers, Toolchains and Language Standard requirements for different releases
It may be necessary for the new release to require a new compiler or language standard. For example, starting with `dev` branch we would only support Visual Studio 2019 and above. `C++14` and above will also be required. It is possible that support for some build configurations will be dropped in the new release. It is also possible that some new features added to `dev` branch may not be backportable to old releases.