Un référentiel unique pour tous les modules signifie qu'ils sont étroitement liés dans leur cycle de développement :
- toute branche s'applique à tous les modules (c'est ce que vous voulez)
- toute balise s'applique à tous les modules (ce qui n'est peut-être pas ce que vous voulez)
Si la "v1.2" de votre logiciel a une signification pour chacun de vos modules, alors oui, les avoir tous dans un seul repo est utile.
Si certains modules sont à la version 2.4 alors qu'un autre est à la version 3.6, et un autre à la version 4.5, et..., il est préférable d'avoir des modules indépendants déclarés en tant que sous-répositions.
Lasse V. Karlsen commentaires :
si vous partagez des éléments, tels que des composants et des bibliothèques générales, ils doivent être placés dans leurs propres dépôts
Ce qui est exact, puisque le cycle de développement de ces composants et des bibliothèques du cadre général n'a rien à voir avec celui du programme principal.
Mais le PO ajoute :
Nous disposons de deux séries de modules :
- un ensemble de modules de base qui peuvent être réutilisés dans de nombreuses applications et
- un autre ensemble de modules pour l'application concernée
Ainsi, certains de ces modules (l'"ensemble des modules de base") peuvent être conservés en tant que sous-répôts (dépôts indépendants référencés par le dépôt parent et le projet principal).
Les autres peuvent être fusionnés directement dans le repo parent (un peu comme la commande stratégie de fusion des sous-arbres git ) avec l'astuce Hg que vous mentionnez : " Combiner des référentiels "