Principe numéro 1 : la branche master
doit être utilisable à tout moment
Contrairement à SVN
où le trunk
sert souvent de branche de développement, la facilité de créer des branches en git
fait qu’il vaut mieux garder une branche master
toujours prête à fonctionner.
C’est pourquoi je ne commite jamais directement dans master
, sauf pour corriger des coquilles dans le manuel.
Principe numéro 2 : une branche par issue
Pour chaque issue
(ticket) ouvert, je crée une branche homonyme issueXXX
où XXX est le numéro de l’issue.
Le premier commit de la branche contient un exemple complet minimal, permettant de cerner le problème.
Le dernier commit contient l’effacement de cet exemple, ainsi que l’enregistrement des logs de changement dans le fichier .dtx
. Son message habituel est changelog + fixe #XXX
. Le fixe #XXX
permet de fermer automatiquement l’issue lors de la fusion dans master
.
Je demande à la personne ayant ouvert l’issue de tester à partir de ces branches.
Si la résolution d’un ticket dépend de la résolution d’un autre ticket, je fusionne d’une branche à l’autre.
Si une personne rouvre une issue fermée, deux solutions :
- soit je considère qu’il s’agit en fait d’un problème différent, et dans ce cas je demande de rouvrir une nouvelle issue ;
- soit j’avais mal résolu le problème, et dans ce cas je crée une branche
issueXXX-bis
.
Principe numéro 3 : jamais de rebasage ou de fast-forward, toujours de la fusion de branche
Le principe de créer des branches est de pouvoir faire des développements parallèles. Il importe que la trace de ces développements parallèles soit conservée même une fois finis les développements. C’est pourquoi je ne rebase jamais les branches une fois un développement achevé, et je refuse les fast-forward.
Ainsi qu’expliqué ailleurs, le rebasage ne devrait être conservé que pour gérer le cas où mon dépôt distant et mon dépôt local n’ont plus le même historique. Comme je travaille quasiment seul, cela m’arrive rarement.
J’ai donc dans mon .gitconfig
global les lignes suivantes :
[pull]
ff = only
rebase = preserve
[merge]
ff = false
Principe numéro 4 : une branche par release
Avant de sortir (« releaser ») une nouvelle version, je crée une branche.
Le nom de cette branche correspond au numéro de version de la future release. Dans le cas de reledmac, comme en plus reledpar n’a pas le même numéro de version, j’utilise un tiret pour séparer les deux numéros. Cela donne donc x1.y1.z1-x2-y2-z2
.
Dans cette branche :
- je fusionne les branches fonctionnelles / de débogage ;
- je corrige le cas échéant le changelog, pour adapter à la date effective de sortie ;
- je procède aux tests automatiques.
Puis je fusionne avec master
, d’où je prépare la sortie effective.
Principe numéro 5 : une branche par version majeure
Avant reledmac
, ils y avaient eledmac
et ledmac
. Dans mon système de codification, reledmac
est la version 2
, eledmac la version 1
et ledmac la version 0
. J’ai donc une branche 1
et une branche 0
pour les rares cas où j’accepte d’intervenir sur ces anciennes versions [1].
Principe numéro 6 : une branche pour la relecture de l’anglais
Comme je demande régulièrement à des personnes de relire l’anglais et le manuel de reledmac/reledpar, j’ai créé une branche english2
[2]. Cette branche contient l’état des fichiers après la dernière relecture par un e correcteur trice. Je m’en sers pour proposer de ne relire que les nouvelles modifications en comparant english2
et master
.
Principe numéro 7 : ne pas conserver les branches fusionnées
Une fois une branche fusionnée, je la supprime en local comme en distant.
Appendice : principe de numérotation des tags et des release
J’utilise un système simple de numérotation sur le mode x.y.z
- Un changement de
x
indique une rupture majeure, impliquant de grands changements. Dans le monde LaTeX, je change également le nom, pour faciliter la compatibilité ascendante des documents. - Un changement de
y
indique de nouvelles fonctionnalités. - Un changement de
z
indique une correction de bug. - Parfois j’ajoute une lettre (
a
,b
,c
, etc.) pour indiquer une simple correction dans le manuel.
Mes tags correspondent simplement au numéro de version (pas de v.
devant). Dans le cas de reledmac
-reledpar
, comme les deux paquets sont liés sur le dépôt et en distribution, mais sont néanmoins distincts, mes tags ont la forme macx1.y1.z1-parx2.y2.z2
.
J’ai enfin des tags sur tests abandonnés, que je garde plus pour me dire « si jamais il me revient à l’idée de reprendre ce projet ».
Vos commentaires
# Le 17 avril à 13:45, par Plassard Joanny
En réponse à : Ma politique de branches avec Git
Bonjour,
Merci pour ces articles et leurs contenus. Je cherche à faire du suivi de version avec Git pour la construction des mes packages et classes LaTex. J’aimerais si possible un conseil sur la structure à utiliser pour ce travail ? Dans mon dossier « .../texmf/tex/latex/ » j’ai tous mes packages et classes que je souhaiterais suivre avec Git (une vingtaine). Dois-je les trier dans des sous-dossier différents afin de faire ensuite un dépot Git local par dossier de package ou classe ? Sachant que les packages sont généralement utilisés dans plusieurs classes par exemple. Ou y a-t-il un moyen avec Git de les gérer avec un seul dépot local et qu’il soit tous dans le même dossier ?
Merci par avance, je peine à trouver des informations claires sur ce sujet.
Cordialement,
# Le 17 avril à 13:51, par Maïeul
En réponse à : Ma politique de branches avec Git
Je conseillerai de faire un dépot par package. C’est plus cohérent d’un point de vue developement : en théorie un package correspond à un besoin précis.
Il y est tout à fait possible d’avoir plusieurs dossier dans le dossier
/texmf/tex/latex/
, comportant chacun ses fichiers sty.# Le 18 avril à 12:00, par Plassard Joanny
En réponse à : Ma politique de branches avec Git
Merci de votre retour rapide, oui cela parait plus logique en effet. Ça impose peut être de changer souvent de dossier dans le terminal pour faire les commit et la gestion Git si l’on travaille sur le développement de plusieurs package en même temps. J’utilise TexStudio pour coder et j’ai vu qu’il y a une prise en charge de Git, ça peut peut-être simplifier les choses, je vais regarder tout ça. Merci encore.
# Le 18 avril à 19:00, par Maïeul
En réponse à : Ma politique de branches avec Git
Je ne pense pas que ce soit une bonne idée de travailler vraiment en meme temps (= dans la même séquence de travail) plusieurs packages.