web-dev-qa-db-fra.com

Mettre à jour l'élément à la révision par rapport à Revenir à la révision

J'ai commencé à utiliser Subversion avec TortoiseSVN. Si j'ouvre le journal et que je clique avec le bouton droit de la souris sur une ancienne révision, deux options sonnent comme si elles revenaient à une version plus ancienne: "Mettre à jour l'élément en révision" et "Revenir à cette révision".

Je comprends que la mise à jour vers une révision plus ancienne est utilisée lorsque vous souhaitez uniquement consulter une ancienne version sans changer réellement le référentiel. Revenir en arrière est le moment où vous voulez vraiment que la dernière révision du référentiel soit identique à une version antérieure.

Donc, disons que la révision HEAD est 100 et que je reviens à 95. Il sera alors possible de fusionner ma copie de travail en 95. Ensuite, je peux valider cette modification dans le référentiel, ce qui créerait la révision 101 correcte? En quoi est-ce différent si je dois revenir à la révision 95? N’inverse-t-il toujours pas les modifications des dernières révisions? Je ne comprends pas comment l’état de ma copie de travail diffère après une restauration ou une mise à jour vers une version plus ancienne. révision.

160
Eric Anastas

pdate to revision ne mettra à jour que les fichiers de votre copie de travail avec la révision de votre choix. Mais vous ne pouvez pas continuer travailler sur cette révision, car SVN se plaindra que votre copie de travail est obsolète.

retournez à cette révision annulera toutes les modifications apportées à votre copie de travail 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 identique. Cependant, dans le premier cas, vous avez une copie de travail non modifiée et vous ne pouvez pas valider vos modifications (car votre copie de travail ne pointe pas to HEAD rev 100) dans le second cas, vous disposez d'une copie de travail modifiée pointant vers la tête et vous pouvez continuer à travailler et commettre

202
Peter Parker

Pour comprendre en quoi l’état de votre copie de travail est différent dans les deux scénarios, vous devez comprendre le concept de révision 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, cela fait référence à la façon dont 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 BASE, ce qui signifie comme il était lors de la dernière extraction du référentiel . . Cela explique pourquoi les copies de travail occupent deux fois plus d'espace et qu'il est possible d'examiner et même d'annuler les modifications locales sans connexion réseau.

L'élément de mise à jour en révision modifie cette révision de base, ce qui rend BASE obsolète. Lorsque vous essayez de valider des modifications locales, SVN remarquerez que votre BASE ne correspond pas à la tête HEAD du référentiel. Le commit sera refusé jusqu'à ce que vous fassiez une mise à jour (et éventuellement une fusion) pour résoudre ce problème.

Revenir à la révision ne change pas BASE. En principe, cela revient presque à éditer manuellement le fichier pour qu’il corresponde à une révision antérieure.

31
Wim Coenen

Les fichiers de votre copie de travail peuvent regardez exactement les mêmes après, mais il s’agit toujours d’actions très différentes - le référentiel est dans un état complètement différent, et vous aurez différentes options à votre disposition après avoir annulé "mise à jour" à une ancienne révision.

En bref, "mise à jour" affecte uniquement votre copie de travail, mais "fusion et validation" affectera le référentiel.

Si vous "mettez à jour" une ancienne révision, le référentiel n'a pas changé: dans votre exemple, la révision HEAD est toujours 100. Vous n'avez rien à commettre, vous êtes juste Si vous apportez des modifications à votre copie de travail et tentez de vous engager, on vous dira que votre copie de travail est périmée et vous devrez la mettre à jour avant de pouvoir vous engager. sur le même référentiel effectue une "mise à jour", ou si vous extrayez une deuxième copie de travail, ce sera r100.

Cependant, si vous "fusionnez" avec une ancienne révision, votre copie de travail est toujours basée sur le HEAD (en supposant que vous soyez à jour) - mais vous créez une nouvelle révision pour remplacer les modifications indésirables. Vous devez valider ces modifications, car vous modifiez le référentiel. Une fois cette opération effectuée, toutes les mises à jour ou les nouvelles copies de travail basées sur HEAD affichera r101, avec le contenu tu viens de commettre.

5
Zac Thompson

Mettez à jour votre copie de travail avec la révision sélectionnée. Utile si vous souhaitez que votre copie de travail reflète une heure passée ou s'il y a eu d'autres validations dans le référentiel et que vous souhaitez mettre à jour votre copie de travail étape par étape. Il est préférable de mettre à jour tout un répertoire de votre copie de travail, pas un seul fichier, sinon votre copie de travail pourrait être incohérente. Ceci est utilisé pour tester un objectif spécifique du rev. Si votre test est terminé, vous pouvez utiliser cette commande pour tester un autre rev ou utiliser SVN Update pour obtenir HEAD

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

- de l'aide de TSVN

Si vous mettez à jour votre copie de travail sur une version antérieure, cela n'affectera que votre propre copie de travail. Après avoir effectué certaines modifications et que vous souhaitez valider, vous échouerez, TSVN vous avertira de mettre à jour votre WC à la dernière révision en premier. Pour un rev, vous pouvez vous engager sur repository.everyone reviendra sur le rev après avoir effectué une mise à jour.

4
prime23

Le texte de la référence Tortue:

Mise à jour d'un élément à la révision Mettez à jour votre copie de travail avec la révision sélectionnée. Utile si vous souhaitez que votre copie de travail reflète une heure passée ou s'il y a eu d'autres validations dans le référentiel et que vous souhaitez mettre à jour votre copie de travail étape par étape. Il est préférable de mettre à jour tout un répertoire dans votre copie de travail, pas un seul fichier, sinon votre copie de travail pourrait être incohérente.

Si vous souhaitez 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 apporté plusieurs modifications et décidez ensuite que vous souhaitez réellement revenir à l'état d'avancement de la révision N, cette commande est nécessaire. Les modifications sont annulées dans votre copie de travail afin que cette opération n'affecte pas le référentiel tant que vous n'avez pas validé les modifications. Notez que cela annulera toutes les modifications apportées après la révision sélectionnée, en 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 apparaîtra 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 toutes les modifications apportées après la révision sélectionnée, annulant ainsi l’effet des validations précédentes.

Si, après avoir effectué cette action, vous décidez d'annuler l'annulation et de ramener votre copie de travail à son état antérieur non modifié, vous devez utiliser TortoiseSVN → Revert à partir de l'Explorateur Windows, ce qui annulera les modifications locales apportées par cette action de fusion inversée.

Si vous voulez simplement voir à quoi ressemblait un fichier ou un dossier lors d’une précédente révision, utilisez Mettre à jour pour révision ou Enregistrer la révision sous ... à la place.

2
Liker777

@BaltoStar met à jour la syntaxe de révision:

http://svnbook.red-bean.com/fr/1.6/svn.ref.svn.c.update.html

svn update -r30

Où 30 est le numéro de révision. J'espère que cette aide!

1
Rishabh Agarwal