lundi 7 janvier 2013

Back to SVN: Histoire de Merge

Git a eu beaucoup de succès. C’est un Système de Gestion de Version distribué qui présente beaucoup de fonctionnalités utiles dans les nouvelles méthodologies de développement. Mais le bon « vieux » gestionnaire Subversion a encore de beaux jours devant lui, il reste utilisé dans beaucoup de projets, sans doute, encore plus que Git.

Parmi les features de SVN on a les Branches et les Tags qui permettent d’isoler certaines tâches (telle la correction de bug ou le développement de nouvelles fonctionnalités) et de pouvoir revenir sur des états stables d’un projet.

Récemment lors des besoins d’un Merge d'une branche sur le trunk, opération normalement simple, je disposais d'un connecteur SVN (JavaHL) qui s'y prêtait mal à la gestion des conflits. Sur le net je tombe sur pas mal de sujets qui traitent le même problème, mais sans la solution. Finalement, c’est avec le connecteur SVN Kit que j’ai trouvé mon bonheur.

Nota : Si c’est votre première manip il vaut mieux sauvegarder le projet avant de commencer, le risque de se tromper n’est pas exclu.

Il y a principalement deux étapes comme c’est traité dans cette discussion sur Stackoverflow, le Merge et la Résolution de conflits.

Le Merge

Choix de la Révision :

Il faut d’abord commencer par choisir la révision à partir de laquelle on veut effectuer le merge. S’il s’agit du premier merge entre la branche (B) et le trunk (T) la révision à choisir correspondra à la date de création de la branche. Si ce n’est pas le premier merge la révision doit correspondre à la date du dernier merge effectué entre B et T.

  • Click Team > Show History pour voir la liste des 25 dernières révisions.

( Click All pour étendre la liste des versions ) (1).

Noter le numéro de la bonne révision. (supposons R1)
Déroulement du Merge :
  • Se positionner sur le trunk (Click droit sur le projet Team > Swith) .
  • Click droit sur le projet Team > Merge.
  • Saisir l’url de la branche (fig 1)
  • On choisit toutes les révisions supérieures ou égales à R1 (fig 2 et 3) et on valide (OK)

(Si on veut récupérer toutes les révisions de la branche on choisit All)

La résolution des conflits

Après la validation du Merge on passe directement à la vue Synchronize pour résoudre les conflits. Dans le cas d’une synchronisation classique entre deux révisions d’une même branche on double click sur le fichier concerné pour résoudre le problème. Mais dans le cas d’un merge sur deux branches il faut faire Click droit sur le fichier puis Edit conflit pour résoudre les conflits. Pour préciser que le conflit est résolu on fait Click droit sur le fichier puis Mark as merged.Et quand tous les conflits seront résolus on pourra facilement faire le commit.