The document describes a Git multi-repository workflow that allows each team to work independently in their own Git repository while also sharing a central "root" repository. Key aspects include each team having their own repository, a master root repository, and continuous integration (CI) being used to merge changes between repositories and ensure stability on chosen branches.
1. Version Control System
Git Multi Repos
JULIEN PLÉE – DEPUTY CTO
AURÉLIE VALÉRY – R&D MANAGER
RACHID AGOUDAR – CHIEF SOFTWARE ARCHITECT
EMMANUEL GUÉRIN – SOFTWARE ARCHITECT
2. Git Multi-repository
Goals :
◦ allow each team to work in its own Git environment
◦ Guarantee stability of some chosen branches using CI to realize the merge operations
How :
◦ by using the Multi-repository pattern, giving each team its own repository and all teams sharing a
master repository
6. Teammate
Repository
arc_Sprint
Environment
Bitbucket Servers
Bitbucket Servers
Workstation
0 – The Teammate commits, and pushes branch “123” to “arc/123”. All team “arc” can now work on it
Root
Repository
Sprint-stable
Dev-stable
Qualif-stable
Sprint
Dev
Qualif
career-arc
Repository
career-fun
Repository
arc_Sprint-stable fun_Sprint-stablearc_Sprint fun_Sprint
Repositories
123
123
7. Teammate
Repository
arc_Sprint
Environment
Bitbucket Servers
Bitbucket Servers
Workstation
0 – In the same time, “Root/Sprint” received some new commit from “career-fun” repository
Root
Repository
Sprint-stable
Dev-stable
Qualif-stable
Sprint
Dev
Qualif
career-arc
Repository
career-fun
Repository
arc_Sprint-stable fun_Sprint-stablearc_Sprint fun_Sprint
Repositories
123
123
8. Teammate
Repository
arc_Sprint
Environment
Bitbucket Servers
Bitbucket Servers
Workstation
0 – Jenkins validates the commit and merges it in the branch “Root/Sprint-stable”. Team “fun” fixes potential errors
Root
Repository
Sprint-stable
Dev-stable
Qualif-stable
Sprint
Dev
Qualif
career-arc
Repository
career-fun
Repository
TA_Sprint-stable fun_Sprint-stablearc_Sprint fun_Sprint
Repositories
123
123
11. Teammate
Repository
arc_Sprint
Environment
Bitbucket Servers
Bitbucket Servers
Workstation
0 – Jenkins validates and merges “arc/arc_Sprint” in “arc/arc_Sprint-stable”. Team “arc” fixes potential errors
Root
Repository
Sprint-stable
Dev-stable
Qualif-stable
Sprint
Dev
Qualif
career-arc
Repository
career-fun
Repository
arc_Sprint-stable fun_Sprint-stablearc_Sprint fun_Sprint
Repositories
123
123
A Teammate could always use
“arc/arc_Sprint-stable”
if he wants to be sure to start
from a stable commit
13. Teammate
Repository
arc_Sprint
Environment
Bitbucket Servers
Bitbucket Servers
Workstation
0 – Teammate pushes “arc_Sprint” into “arc/arc_Sprint” and Jenkins validates it. Team “arc” fixes potential errors
Root
Repository
Sprint-stable
Dev-stable
Qualif-stable
Sprint
Dev
Qualif
career-arc
Repository
career-fun
Repository
arc_Sprint-stable fun_Sprint-stablearc_Sprint fun_Sprint
Repositories
123
123
14. Teammate
Repository
arc_Sprint
Environment
Bitbucket Servers
Bitbucket Servers
Workstation
0 – Teammate pulls “arc/arc_Sprint-stable” into “arc_Sprint” and pushes it on “Root/Sprint”
Root
Repository
Sprint-stable
Dev-stable
Qualif-stable
Sprint
Dev
Qualif
career-arc
Repository
career-fun
Repository
arc_Sprint-stable fun_Sprint-stablearc_Sprint fun_Sprint
Repositories
Note : It will sometimes be needed to
Merge “Root/Sprint” into “arc_Sprint” as other
teams could have already push something in it
So there is no warranty that “arc_Sprint” is stable
and the team could be fixing it after