Doit être propagé à tous (utilisateurs [éventuellement regroupés à d’autres] + développeurs)
Feature :
Développement d’une nouvelle fonctionnalité du modèle
Long terme
Doit être propagé aux développeurs quand l’auteur estime la fonctionnalité prête
Cosmetic :
Correction de détails qui ne changent pas le fonctionnement du modèle
Moyen terme
Peut être propagé aux développeurs chaque semaine
Branches à utiliser :
chimereRoot/master :
Correspond au code distribué aux utilisateurs, avec des étiquettes de release
Reçoit les bugfix au cours du temps
Recevra les nouveautés peu avant la diffusion d’une nouvelle version
chimereRoot/devel :
Préparation de la nouvelle version
Reçoit les bugfix (commun à master)
Reçoit les nouvelles features terminées + les corrections de bug de ces features
Reçoit régulièrement les petites modifs cosmetic
depotPerso/feature :
branche personnel de l’auteur qui développe une nouvelle fonctionnalité
la branche évolue et reste dans le dépot de l’auteur tant que la fonctionnalité n’est pas prête
la branche est maintenue par l’auteur pour naitre de la head de chimereRoot/devel, en utilisant rebase après chaque évolution de chimereRoot/devel (voir plus bas)
depotPerso/cosmetic :
branche personnel de l’auteur qui corrige une imprecision, ajoute un print, quelque chose de décorélé des features en cours, développements globalement neutres pour le modèle
la branche démarre de chimereRoot/devel après chaque évolution de celle-ci
la branche est inclue dans chimereRoot/devel à chaque session de commit
ces modifs n’apparaissent pas instantanément dans la nouvelle feature en cours, mais le seront après le rebase de depotPerso/feature
depotPerso/bugfix :
Branche contenant des bugs sérieux qui provoquent un comportement anormal du modèle
on indique bugfix dans le label des commits
on prévient sur slack dans un channel dédié
les commits sont passés immédiatement sur chimereRoot/devel et chimereRoot/master avec notes pour les utilisateurs
les branches perso des développeurs sont rebasées sur cette nouvelle head de chimereRoot/devel
Choses souhaitables :
On ne cheery-pick pas (ni merge) des commits provenant de branches perso des développeurs :
si le commit souhaitée est un bugifx il sera alors dans chimereRoot/devel et on rebase ses branches sur la head de chimereRoot/devel
si le commit souhaitée est peu critique, cela peut attendre une semaine, le rebase le fera alors apparaitre dans les branches feature
On ne laisse pas ses branches prendrent racine ailleurs que sur la head de chimereRoot/devel
Si besoin de tester à plusieurs un problème, on fait les cherry-pick, les merge, la cuisine interne que l’on veut mais dans son repertoire de travail, on essaye d’eviter d’afficher les commits en double dans les dépôts publiques
Si une feature n’est pas fonctionnelle on continue de la faire évoluer sans la passer dans chimereRoot/devel
Si la feature est développée à plusieurs la branche peut aussi etre poussées sur chimereRoot/feature
Exemple de workflow
workdir : mon répertoire de travail
depotPerso : mon dépôt perso publique
chimereRoot : le depôt officiel
Lundi : Je commence à travailler sur XIOS dans mon workdir :
git checkout devel
git checkout -b feature/xios
code : module xios
git add / commit -m 'Init XIOS integration'
git push depotPerso feature/xios
Mardi : je constate qu’il manque des print d’information :
git checkout devel
git checkout -b cosmetic/verbose
code : if chimverb
git add / commit -m 'chimverb 17'
git push depotPerso cosmetic/verbose
Mercredi : je continue sur XIOS
git checkout feature/xios
…
les commits cosmetics ne sont pas présents mais ce n’est pas urgent
Jeudi : je trouve un bug critique
git checkout devel
git checkout -b bugfix/ungrib
code : ungrib
git add / commit -m 'BUGFIX : ungrib'
git push depotPerso bugfix/ungrib
message dans le slack pour report immédiat dans chimereRoot/devel et chimereRoot/master
je rebase mes branches une fois le report fait :
git checkout devel
git pull chimereRoot/devel (je mets à jour ma copie miroir du devel)
git checkout feature/xios
git rebase devel (correction des conflits)
git push --force depotPerso feature/xios (je remets ma branch feature à jour sur mon dépôt public)
git checkout cosmetic/verbose
git rebase devel
git push --force depotPerso cosmetic/verbose
Vendredi : on commit sur devel
XIOS n’est pas fini, on ne fait rien
on passe les branches cosmetic sur devel
on passe les features finies sur devel
dans mon workdir je me mets à jour :
git checkout devel
git pull chimereRoot/devel (je mets à jour ma copie miroir du devel)
git push --force depotPerso devel
git checkout feature/xios
git rebase devel (correction des conflits)
git push --force depotPerso feature/xios
mes branches cosmetic peuvent disparaitre
Test de compilation sur chimster et irene
Test 1 jour CONTXX
L’auteur des nouvelles features vérifie que la chimereRoot/devel (i.e. sa feature plus les cosmetics) fonctionne normalement
Questions :
LM : Par exemple, je cherry-pick des commits des autres (a ne pas faire donc) mais parce que je prefere integrer leur changement avant de faire le mien qui est dans la meme routine. alors comment faire?
Je pense que in-fine dans ta branch feature si tu as peur de conflit tu peux faire ce cherry-pick avant de modifier par-dessus la routine, lorsque que ce commit sera intégré dans la chimereRoot/devel , le rebase devrait le faire disparaitre de ta branche. Si on part du principe qu’on ne regarde pas ta branch feature pour les commits du jour il n’y a pas de problèmes