Nous sommes un petit magasin ISV et nous expédions généralement une nouvelle version de nos produits chaque mois. Nous utilisons Subversion comme référentiel de code et Visual Studio 2010 comme IDE. Je sais que beaucoup de gens préconisent Mercurial et d'autres systèmes de contrôle de source distribués, mais à ce stade, je ne vois pas comment nous pourrions en bénéficier, mais je peux me tromper.
Notre principal problème est de savoir comment synchroniser les branches et le tronc principal.
Voici comment nous faisons les choses aujourd'hui:
- Release new version (create automatically a tag in Subversion)
- Continuez à travailler sur le coffre principal qui sortira le mois prochain
Et le cycle se répète tous les mois et fonctionne parfaitement. Le problème se pose lorsqu'une version de service urgente doit être publiée. Nous ne pouvons pas le libérer du coffre principal (2) car il est en cours de développement et il n'est pas suffisamment stable pour être libéré de toute urgence.
Dans ce cas, nous procédons comme suit:
- Créez une branche à partir de la balise que nous avons créée à l'étape (1)
- Correction d'un bug
- Test et publication
- Repousser le changement dans le coffre principal (le cas échéant)
Notre plus gros problème est de fusionner ces deux (branche avec principal). Dans la plupart des cas, nous ne pouvons pas compter sur la fusion automatique car, par exemple:
- de nombreux changements ont été apportés au tronc principal
- la fusion de fichiers complexes (comme les fichiers XML Visual Studio, etc.) ne fonctionne pas très bien
- un autre développeur / équipe a apporté des modifications que vous ne comprenez pas et que vous ne pouvez pas simplement fusionner
Donc, ce que vous pensez est la meilleure pratique pour garder ces deux versions différentes (branche et principale) synchronisées. Que faire?