web-dev-qa-db-fra.com

Qu'est-ce que Reverse Merge (Revert Merge) dans SVN, une explication simple et les processus étape par étape du début à la fin

Qu'est-ce que la fusion inversée (Revert Merge) dans SVN, une explication simple et les processus étape par étape du début à la fin seraient formidables.

Quelqu'un peut-il me donner les processus, numérotés si vous le pouvez. Et un bon exemple simple serait également très bien.

19
Nahser Bakht

De Tortoise Guide de l'utilisateur :

Si vous souhaitez fusionner les modifications de votre copie de travail, pour annuler une modification qui a déjà été validée, sélectionnez les révisions à annuler et assurez-vous que la case Inverser la fusion est cochée.

De mon point de vue, une fusion inversée est un commit "normal" qui représente un "anti" -commit à un ou plusieurs anciens commits. L'ancien commit existera toujours, mais les changements seront annulés par le biais d'un nouvel "anti" -commit.

23
Micha

Réponse courte

Une fusion inversée est formellement identique à une fusion, mais, bien sûr, dans l'ordre inverse. Les modifications des révisions fusionnées de manière inversée sont annulées dans votre copie de travail.

Exemple

Par exemple, si vous voulez revenir de HEAD à la rév. 123, vous procéderez à une fusion inverse comme ceci, en supposant que votre copie de travail soit dans HEAD state :

svn merge -r HEAD:123

Cela définira votre copie de travail dans l'état de révision 123, mais elle sera formellement basée sur HEAD. L'état de votre copie de travail est alors le même que si vous aviez modifié manuellement vos fichiers à la révision 123. Rien n'aura encore changé dans le référentiel.

Notez que ce n'est pas la même chose que mise à jour vers la révision 123. Si vous aviez fait cela, bien que vos fichiers de copie de travail aient le même contenu dans les deux cas, l'état de votre copie de travail serait différent: SVN saurait que votre copie de travail était basée sur la révision 123 au lieu de TÊTE. Si vous essayez ensuite de valider les modifications, cela vous dira que vous devez d'abord mettre à jour vers HEAD), ce qui annulerait la mise à jour vers la révision 123, en supposant que vous n'avez rien changé entre-temps.

Revenons à notre scénario d'origine. Si vous êtes satisfait de la fusion inversée, vous pouvez l'archiver dans le référentiel:

svn commit -m "We undid all changes since r123."

Ou, si vous sentez que vous avez fait une erreur, vous pouvez revenir le fusion inverse, ce qui est quelque chose de complètement différent, car il ne fait que remettre votre copie de travail à l'état du référentiel est basé sur (dans notre cas, HEAD):

svn revert --recursive .

Mais soyez prudent avec celui-là, il annule de manière irréversible votre fusion inversée :-). Le point fait référence au répertoire courant, et doit être spécifié explicitement (comme ce n'est pas le cas avec la plupart des autres commandes SVN) comme mesure de sécurité pour éviter tout retour accidentel.

9