At work we need to regorganize our system of version control.
The structure of the project is the following:
2 teams: Team1 and Team2
a) Both Team1 and Team2 work on module A.
b) Team1 also works on B and C, which depend on A.
c) Team2 also works on D, which depends on A but not on B and C
We don't want Team2 to physically have on their local machines B and C (which belong to Team1) and at the same time we don't want Team1 to have D.
The aim is to have complete snapshots of the project in time, i.e. we would like to keep track and rollback to a given version of the whole project at any time.
We thought of using Mercurial subrepos, but it seems impossible (maybe) for a team to ignore the subrepos of the other team. Everyone has to pull every subrepo. Is this correct?
If so, how can we overcome this? Do we really need to have three completely independent repositories and manually track the compatible version of code A with that of both B+C and, separately, of D?
We are worried that such a manual tracking can be prone to errors over time.
You could use subrepos and organize as:
If B and C are unrelated, you may want:
If A changes the teams can choose if and when to update the A subrepo to the new change and commit it to their master repo.