Bonjour,
Cela fait quelques jours que je réfléchi pour mettre en place une solution fiable et propre pour la gestion de source multi-projets axés autour d’une même librairie et je souhaiterais avoir votre avis sur la question et savoir si je fais fausse route sur la solution envisagée.
Voici le contexte : Nous avons plusieurs projets (généralement entre 2 et 4) développés en parallèles par différentes équipes (de 1 à 6 personnes selon les projets) qui se basent sur la librairie, développée en interne et qui évolue au fur et à mesure des besoins des différents projets. Ces projets possèdent une base commune en plus de la librairie et diffèrent généralement par des plugins et des ressources spécifiques. La plupart des modifications effectuées (évolutions, résolutions de bugs, …) lors du développement d’un projet sont généralement réalisées directement sur les sources de la librairie car potentiellement utiles pour d’autres projets (en cours ou avenir). Sachant que la mise à disposition d'une nouvelle fonctionnalité issue d'un projet n'a pas besoin d'être instantanément disponible pour tout les autres projets et peut donc attendre un point stable du projet source avant son intégration dans le dépôt générique.
Actuellement, les deux projets en cours se trouvent sur le même dépôt Git ce qui a pour côté positif la mise en commun « instantanée » des évolutions sur la librairie et les parties communes des projets. Mais également, un nombre de problèmes grandissant :
- Taille du dépôt grossissant dangereusement (plus de 10Go pour le seul répertoire .git)
- Maintenance moins aisée
- Criticité d’un crash du dépôt central contenant tous les projets, par exemple : actuellement le dépôt central n’est plus clonable suite à un vieux commit/push qui a planté (bluescreen de la machine en pleine opération) mais détecté trop tard pour pouvoir faire une réparation « simple »
- …
Mon idée est de passer à un dépôt par projet tout en gardant un moyen « simple » de fusionner les évolutions sur la librairie commune. Et par la même occasion passer à un workflow de type Git-Flow qui me semble adapté à notre besoin et devrait simplifier pas mal de problèmes actuels.
Les deux solutions que j’ai trouvées durant mes recherches sont les sous-modules et les subtrees.
J’ai eu l’occasion de pouvoir tester la solution des sous-modules sur un projet « témoin » (sur 4 mois avec deux développeurs) mais semble plus adaptée à la gestion de librairies tierces (évoluant peu) qu’à notre besoin. C’est également l’avis que j’avais pu lire sur plusieurs articles sur cette solution. Voici les principaux problèmes rencontrés :
- Source d’erreur (faute d’inattention du développeur) dans la gestion des branches donc peu adapté à Git-Flow
- La plupart des commits concernent la librairie et entraine un commit « vide » du projet pour « lié » l’état de la librairie
- La lisibilité de l’historique d’un projet est nettement plus compliquée vu qu’il faut prendre en compte l’historique de plusieurs dépôts
Bref, je ne donne que quelques jours à cette solution avant d’être rejetée par le reste de l’équipe surtout sur de plus gros projets avec plus de développeurs et de retourner à la case départ (sans compter la perte de temps pour la mise en place des sous-modules). Ce que je comprendrais parfaitement puisque j’ai moi-même eu régulièrement l’envie de repasser sur un dépôt sans sous-module …
Reste la seconde solution qui me semble plus adapté à notre besoin :
- Une personne par projet aura la responsabilité d’intégrateur au moment de la fusion
- Pour la gestion du dépôt quotidien (commit, …) l’équipe d’un projet pourra travailler sur un dépôt « simple »
- Aucune difficulté pour l’utilisation de Git-Flow
- Lorsqu’un projet est en fin de développement, les évolutions des autres projets ne seront plus intégrées. Ce que je ne vois pas tout à fait comment faire dans le cas des sous-modules.
Le seul point négatif que je vois est l’obligation de passer par des lignes de commandes. Mais qui devrait pouvoir être contourné par la rédaction d’un guide d’intégration propre à notre situation.
L’idée serait alors d’avoir un dépôt central complet d’un « projet générique » qui servirait :
- De base pour tout nouveau projet.
- De cible pour les intégrateurs lors les fusions
- De projet de validation et d’exemple d’usage pour les nouvelles fonctionnalités
Je souhaiterais donc avoir vos avis sur la question sachant que je suis certain que l’utilisation des sous-modules ne sera pas tolérée très longtemps vu les potentielles complications et que la solution actuel du dépôt unique pour tous les projets ne pourra pas tenir très longtemps. Il y a-t-il une solution plus adaptée que les subtrees ?
Merci d’avance pour vos réponses et d’avoir pris le temps de lire le post.








Répondre avec citation





Partager