Source Code Management Interest Group Tools and procedures used in the yacs project

PreviousNextIndex

Mettre à jour son Yacs "customisé" avec SmartGit

Voici une méthode illustrée permettant, à l'aide de SmartGit, de simuler la mise à jour d'une version "customisé" de Yacs en l'upgradant avec les nouvelles versions de Yacs.

Dans cet exemple, l'installation de Yacs se résume à un fichier yacs.txt copié dans le dossier Gitest2 sur lequel un projet "Git" a été créé avec SmartGit (pour plus d'explications, voir Les bases Git avec SmartGit).

Voici le contenu de ce fichier :

ceci est le début du fichier

ceci est le milieu du fichier

ceci est la fin du fichier

Je réalise un Commit de ce fichier que j'appelle Yacs version 1 et qui est supposé être la version stable de yacs au début de mon projet (il s'agit de ma branche principale master).

Ayant besoin d'adapter Yacs à mon goût, je crée une branche custom à partir de Yacs version 1.

Dans cette branche custom, je modifie le fichier yacs.txt en ajoutant le texte : j'ajoute cette ligne dans ma version "custom", au milieu du fichier :

Je lance alors un commit (avec SmartGit, on n'est pas obligé de faire un add auparavant) pour obtenir ma version custom A.

Une nouvelle version de yacs.txt sort. L'équipe de développement à également ajouter une nouvelle ligne au milieu du fichier :

Sur ma branche master, je récupère cette nouvelle version en écrasant mon ancien yacs.txt avec le nouveau yacs.txt. Je lance un commit que j'intitule yacs version 2.

Je voudrais maintenant mettre à jour ma version custom pour quelle intègre les nouvelles fonctions apportées par la version 2 de yacs. Je switche sur la branche custom et je lance un Rebase.

Dans la première boite de dialogue qui me permet de définir la cible (target), j'affiche toutes branches puis je sélectionne la version 2 de yacs dans la branche master :

Je sélectionne ensuite la version custom A de ma branche custom afin de servir de source :

Enfin, je choisi de faire un Rebase de ma source custom sur la cible (master).

Les modifications que j'ai apporté sur ma version custom (la source) vont être rejouées sur la nouvelle version yacs (la cible) pour me fournir une nouvelle version custom qui contiendra à la fois les nouveauté de yacs version 2 et mes développements qui constituaient ma version custom A.

Dans le cadre Output, je peux suivre l'avancement de l'opération de Rebase. Ma modification intitulée Version Custom A est appliquée sur la version 2 de Yacs.

Mais l'intégration de ma modification dans la nouvelle version de yacs échoue. Git constate que le milieu du fichier yacs.txt a été modifié des 2 côtés et ne sait pas choisir ce qu'il faut retenir. Le cadre Output me donne des indications sur le fichier concerné et les choix qui s'offre à moi :

  • résoudre le conflit dans le fichier et continuer l'opération de Rebase
  • abandonner le Rebase et revenir en arrière
  • sauter cette modification qui ne sera pas incluse dans le résultat final

Git a également modifié le fichier concerné en montrant les lignes qui posent problème.

J'ouvre le fichier yacs.txt et le modifie pour conserver ma modification "custom" ainsi que celle de la nouvelle version. Je valide ma modification en cliquant sur le bouton Stage :

Puis je continue l'opération de Rebase :

 puis 

Si je regarde la log de mon fichier yacs.txt, je constate que dorénavant, il est tracé comme provenant de Yacs version 1 upgradé en yacs version 2 puis modifié avec ma version custom A. C'est comme si j'étais parti de la version 2 de yacs sur laquelle j'avais ensuite réalisé mes modifications correspondant à ma version custom A.

Alors que dans la réalité, c'est sur la version 1 de yacs que j'avais ajouté les modifications de version custom A…

Qu'est ce que ça change me dirais vous ? Rien à ce stade. Mais voilà qu'arrive la version 3 de yacs.

Si j'avais pris l'option de fusionner les nouveautés de la version 2 de yacs dans ma version custom (c'est-à-dire un merge au lieu d'un rebase), et que je recommence le merge avec cette version 3, je risque d'avoir de nouveau des conflits à gérer.

Tandis que si je rebase ma version custom avec la version 3 de yacs, n'ayant pas apporté de modification à ma version custom, la mise à jour de ma version custom se fait sans anicroche.

PreviousNextIndex