161 votes

Mise à jour de l'élément vers la révision vs. retour à la révision

J'ai commencé à utiliser Subversion avec TortoiseSVN. Si j'ouvre le journal et que je fais un clic droit sur une ancienne révision, je vois deux options qui semblent revenir à une ancienne version : "Mettre à jour l'élément à la révision" et "Revenir à cette révision".

Je comprends que la mise à jour vers une révision plus ancienne est utilisée lorsque vous voulez seulement regarder une ancienne version mais pas vraiment changer le référentiel. Le retour en arrière est utilisé lorsque vous avez fait une erreur et que vous voulez que la dernière révision du référentiel soit identique à une ancienne version.

Ainsi, disons que la révision HEAD est de 100 et que je reviens à 95. Il va inverser la fusion de ma copie de travail vers 95. Ensuite, je peux livrer ce changement au référentiel, ce qui créerait la révision 101, correct ? Quelle est la différence avec la mise à jour de la révision 95 ? Ne s'agit-il pas encore d'inverser les changements des dernières révisions ? Je ne comprends pas comment l'état de ma copie de travail diffère après un retour en arrière ou une mise à jour vers une révision plus ancienne.

204voto

Peter Parker Points 13770

Mise à jour de la révision ne mettra à jour que les fichiers de votre copie de travail à la révision que vous avez choisie. Mais vous ne peut pas continuer pour travailler sur cette révision, car SVN se plaindra que votre copie de travail est périmé .

revenir à cette révision annulera toutes les modifications dans votre copie de travail qui ont été faites après la révision sélectionnée (dans votre exemple, rév. 96,97,98,99,100). Votre copie de travail est maintenant dans état modifié .

Le contenu du fichier des deux scénarios est le même, mais dans le premier cas, vous avez un fichier de type copie de travail non modifiée et que vous ne pouvez pas valider vos modifications (car votre copie de travail ne pointe pas vers HEAD rev 100), dans le second cas, vous avez un problème de type modifié copie de travail pointant vers la tête et vous pouvez continuer à travailler et à commettre

31voto

Wim Coenen Points 41940

Pour comprendre comment l'état de votre copie de travail est différent dans les deux scénarios, vous devez comprendre le concept de l'élément Révision de la BASE :

BASE

Le numéro de révision d'un élément dans une copie de travail. Si l'élément a été modifié localement, il s'agit de la comment l'élément apparaît sans ces modifications locales.

Votre copie de travail contient un instantané de chaque fichier (caché dans un dossier .svn) dans cette révision de BASE, ce qui signifie que tel qu'il était lors de la dernière récupération dans le référentiel . Cela explique pourquoi les copies de travail prennent 2x l'espace et comment il est possible d'examiner et même de rétablir des modifications locales sans connexion réseau.

Mise à jour de l'élément dans la révision modifie cette révision de base, rendant BASE obsolète. Lorsque vous essayez de livrer des modifications locales, SVN remarquera que votre BASE ne correspond pas au HEAD du dépôt. Le commit sera refusé jusqu'à ce que vous fassiez une mise à jour (et éventuellement une fusion) pour corriger cela.

Revenir à la révision ne modifie pas la BASE. Sur le plan conceptuel, c'est presque la même chose que de modifier manuellement le fichier pour qu'il corresponde à une révision antérieure.

5voto

Zac Thompson Points 7754

Les fichiers de votre copie de travail peuvent regardez exactement la même chose après, mais ce sont toujours des actions très différentes -- le référentiel est dans un état complètement différent, et vous aurez des options différentes à votre disposition après avoir fait marche arrière que la "mise à jour" à une ancienne révision.

En bref, "update to" n'affecte que votre copie de travail, mais "reverse merge and commit" affectera le dépôt.

Si vous "mettez à jour" une ancienne révision, alors le référentiel n'a pas changé : dans votre exemple, la révision HEAD est toujours 100. Vous n'avez pas besoin de livrer quoi que ce soit, puisque vous êtes juste en train de vous amuser avec votre copie de travail. Si vous apportez des modifications à votre copie de travail et essayez de livrer, on vous dira que votre copie de travail n'est pas à jour, et que vous devrez la mettre à jour avant de pouvoir livrer. Si quelqu'un d'autre travaillant sur le même dépôt effectue une "mise à jour", ou si vous extrayez une deuxième copie de travail, elle sera r100.

Cependant, si vous "reverse merge" vers une ancienne révision, alors votre copie de travail est toujours basée sur le HEAD (en supposant que vous êtes à jour) -- mais vous créez une nouvelle révision pour remplacer les changements non désirés. Vous devez livrer ces changements, puisque vous modifiez le référentiel. Une fois fait, toute mise à jour ou nouvelle copie de travail basée sur le HEAD affichera r101, avec le contenu que vous venez de livrer.

5voto

Codest Points 1306

Mettez à jour votre copie de travail avec la révision sélectionnée. Utile si vous voulez que votre copie de travail reflète un moment dans le passé, ou s'il y a eu de nouveaux commits dans le référentiel et que vous voulez mettre à jour votre copie de travail une étape à la fois. Il est préférable de mettre à jour un répertoire entier dans votre copie de travail, pas seulement un fichier, sinon votre copie de travail pourrait être incohérente. Cette commande est utilisée pour tester une révision spécifique. Si le test est terminé, vous pouvez utiliser cette commande pour tester une autre révision ou utiliser la commande Mise à jour du SVN pour obtenir HEAD

Si vous souhaitez annuler définitivement une modification antérieure, utilisez la fonction Revenir à cette révision à la place.

-- extrait du document d'aide TSVN

Si vous mettez à jour votre copie de travail à une révision antérieure, cela n'affecte que votre propre copie de travail, après avoir fait quelques changements, et que vous voulez valider, vous échouerez, TSVN vous avertira de mettre à jour votre WC à la dernière révision en premier. Si vous revenez à une révision, vous pouvez commiter dans le dépôt. Tout le monde reviendra à la révision après avoir fait une mise à jour.

2voto

Liker777 Points 561

Le texte de la référence Tortue :

Mise à jour de l'élément à la révision Mettre à jour votre copie de travail à la révision sélectionnée. Utile si vous voulez que votre copie de travail reflète un moment dans le passé, ou s'il y a eu de nouveaux commits dans le référentiel et que vous voulez mettre à jour votre copie de travail une étape à la fois. Il est préférable de mettre à jour un répertoire entier dans votre copie de travail, pas seulement un fichier, sinon votre copie de travail pourrait être incohérente.

Si vous voulez annuler définitivement une modification antérieure, utilisez plutôt Revenir à cette révision.

Revenir à cette révision Revenir à une révision antérieure. Si vous avez effectué plusieurs modifications, et que vous décidez ensuite de revenir à la révision N, c'est la commande qu'il vous faut. Les changements sont annulés dans votre copie de travail, donc cette opération n'affecte pas le référentiel jusqu'à ce que vous livriez les changements. Notez que cette commande annulera toutes les modifications effectuées après la révision sélectionnée, remplaçant le fichier/dossier par la version antérieure.

Si votre copie de travail est dans un état non modifié, après avoir effectué cette action, votre copie de travail sera affichée comme modifiée. Si vous avez déjà des modifications locales, cette commande fusionnera les modifications annulées dans votre copie de travail.

Ce qui se passe en interne, c'est que Subversion effectue une fusion inverse de tous les changements effectués après la révision sélectionnée, annulant l'effet de ces commits précédents.

Si après avoir effectué cette action, vous décidez que vous voulez annuler l'annulation et ramener votre copie de travail à son état précédent non modifié, vous devriez utiliser TortoiseSVN → Revenir en arrière à partir de l'Explorateur Windows, qui supprimera les modifications locales faites par cette action de fusion inverse.

Si vous souhaitez simplement voir à quoi ressemblait un fichier ou un dossier lors d'une révision antérieure, utilisez plutôt Mettre à jour la révision ou Enregistrer la révision sous....

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X