Une partie du développement que j'ai fait sur un projet ne peut pas être déployé, et aurait dû être fait dans une branche séparée. J'ai fusionné les changements en arrière (via "revert changes from this revision" de tortoise et une édition minutieuse), annulant le travail qui aurait dû être fait dans une branche séparée, et j'ai commis ce patch inverse au tronc. Je voudrais maintenant créer une branche qui inclut les changements qui ont été annulés dans le patch mentionné ci-dessus. Voici ce que j'ai fait :
J'ai créé une nouvelle branche pour le nouveau développement à la révision précédant la révision d'annulation.
J'ai fusionné la révision d'annulation dans la nouvelle branche via la fonction "merge a range of revisions" dans le SVN de tortoise.
J'ai ouvert le journal des modifications, sélectionné "Inclure les révisions fusionnées", et "rétablir les modifications de cette révision". Cela a inversé ces changements dans ma copie de travail. C'est maintenant ce que je voudrais que la branche soit. J'ai validé ces changements. Ce commit liste le patch d'annulation sous " include merged revisions " ; je ne pense pas qu'il devrait le faire ; il semble y avoir un problème ici. La clé est probablement d'enregistrer ce patch (l'inverse au carré, ou le produit des modifications originales) d'une manière telle que subversion ignore l'opération effectuée pour le créer.
J'ai ensuite fusionné toutes les modifications du tronc dans la nouvelle branche via la même méthode (fusion d'une série de révisions). J'ai inclus une seconde fois le correctif d'annulation original, rendant ma branche identique à trunk (en le listant maintenant trois fois comme une révision fusionnée incluse). Ce n'est pas le résultat souhaité.
<Edit - Solution>
Ce qui suit est le comportement souhaité, et fonctionne correctement :
J'ai d'abord créé un dépôt vide avec les dossiers tags, trunk, branch. Dans trunk j'ai créé un fichier file.txt avec le contenu (rev1) :
one
two
three
Ensuite, modifiez le fichier pour
one
two_edit
three
Et enregistré (rev2). Ensuite, j'ai sélectionné la révision 2 dans le journal et j'ai choisi de rétablir les changements de cette révision et j'ai archivé la révision 3. Le fichier ressemble à nouveau à ceci :
one
two
three
J'ai ensuite créé une branche de trunk à partir de rev3 aux branches \b1 (rev4, was5 ; cette étape fait les deux). Dans les branches \b1 le fichier ressemble à ceci :
one
two
three
Je fais ensuite une reverse merge de la rev2 du trunk vers branches/b1 en ignorant ancestry (rev5). La branche ressemble maintenant à ceci, et c'est maintenant une pure coïncidence que l'historique contienne quelque chose de similaire :
one
two_edit
three
Je modifie le tronc (rev6) pour qu'il ressemble à ce qui suit :
one
two
three
four
Je fusionne todos changements du tronc dans branches/b1 (rev7). branches/b1 ressemble maintenant correctement à :
one
two_edit
three
four
</p> <p>Edit - Solution>
<Edit>
Comment cela devrait fonctionner
Ce qui suit est le comportement souhaité, et fonctionne correctement si l'étape en italique est effectuée comme suit :
J'ai d'abord créé un dépôt vide avec des dossiers tags, trunk, branch. Dans trunk j'ai créé un fichier file.txt avec le contenu (rev1) :
one
two
three
Ensuite, modifiez le fichier pour
one
two_edit
three
Et enregistré (rev2). Ensuite, j'ai sélectionné la révision 2 dans le journal et j'ai choisi de rétablir les modifications de cette révision et j'ai archivé la révision 3. Le fichier ressemble à nouveau à ceci :
one
two
three
J'ai ensuite créé une branche du trunk de rev2 aux branches \b1 (rev4). Dans les branches \b1 le fichier ressemble à ceci :
one
two_edit
three
Je fusionne ensuite la révision 3 du tronc dans les branches. \b1 (rev5), la branche ressemble maintenant à ceci :
one
two
three
J'édite la branche 3 (rev6) comme si j'étais en train de bifurquer à ce stade. C'est maintenant une pure coïncidence que l'historique contienne quelque chose de similaire :
one
two_edit
three
Je modifie le tronc (rev7) pour qu'il ressemble à ce qui suit :
one
two
three
four
Je fusionne todos les changements du tronc dans branches/b1 (rev8). branches/b1 ressemble maintenant à :
one
two_edit
three
four
Comment cela fonctionne-t-il ?
Voici le comportement réel ; il ne fonctionne pas correctement si l'étape en italique est exécutée, ce qui est nécessaire en raison de la complexité de la branche rétroactive. L'erreur se trouve dans la deuxième ligne de l'étape finale.
J'ai d'abord créé un dépôt vide avec des dossiers tags, trunk, branch. Dans trunk j'ai créé un fichier file.txt avec le contenu (rev1) :
one
two
three
Ensuite, modifiez le fichier pour
one
two_edit
three
Et enregistré (rev2). Ensuite, j'ai sélectionné la révision 2 dans le journal et j'ai choisi de rétablir les modifications de cette révision et j'ai archivé la révision 3. Le fichier ressemble à nouveau à ceci :
one
two
three
J'ai ensuite créé une branche du trunk de rev2 aux branches \b1 (rev4). Dans les branches \b1 le fichier ressemble à ceci :
one
two_edit
three
Je fusionne ensuite la révision 3 du tronc dans les branches. \b1 (rev5), la branche ressemble maintenant à ceci :
one
two
three
Dans les branches \b1 J'ai sélectionné la révision 5 dans le journal et j'ai choisi de rétablir les changements de cette révision et de les enregistrer (révision 6). Le fichier ressemble à nouveau à ceci :
one
two_edit
three
Je modifie le tronc (rev7) pour qu'il ressemble à ce qui suit :
one
two
three
four
Je fusionne todos les changements du tronc dans branches/b1 (rev8). branches/b1 ressemble maintenant à :
one
two
three
four