web-dev-qa-db-fra.com

Quelle est la différence entre une suppression et une annulation dans SVN?

J'ai un fichier qui avait été sous contrôle de révision dans SVN (j'utilise tortoiseSVN). Ce fichier est devenu obsolète, donc je ne veux plus qu'il soit dans une copie de travail de mon dépôt. Cependant, il serait probablement bon de conserver l'historique de ce fichier.

Je veux essentiellement "supprimer" ce fichier de sorte qu'il ne soit plus suivi ou "versionné". J'ai la possibilité de "supprimer" ce fichier ou de "déverrouiller" ce fichier.

Quelle est la différence entre "supprimer" et "annuler la version". Quels sont les cas d'utilisation pour chaque commande?

11
Izzo

La suppression d'un fichier de svn, ne supprime pas son historique de révision.
Apparemment, la suppression de l'historique est possible [SO]: Supprimer le fichier avec tout l'historique du référentiel svn .

Pour faciliter les choses, considérons l'analogie suivante.
De svn's PoV, comme:

  • un fichier (source) se compose de:
    • une séquence d'éléments: lignes (de code)

De la même façon:

  • un dossier se compose de:
    • une séquence d'articles: ses enfants:
      • (sous) dossiers
      • des dossiers

Disons que nous avons un fichier svn:

  • Dans la révision [~ # ~] m [~ # ~], une ligne de code (faisons-en la dernière pour mieux illustrer l'exemple) dans ce fichier a été modifiée
  • Dans la révision [~ # ~] n [~ # ~] (> [~ # ~] m [~ # ~]), cette ligne a été supprimée

La situation est la suivante:

  1. Pour les révisions de fichiers supérieures à [~ # ~] n [~ # ~], la ligne ne sera pas présente
  2. Pour les révisions de fichiers entre [~ # ~] m [~ # ~] et [~ # ~] n [~ # ~], la ligne aura son dernier contenu
  3. Pour les révisions de fichiers inférieures à [~ # ~] m [~ # ~], la ligne aura son ancien contenu
  4. ....

La même chose se produirait si la suppression d'un fichier ( de sa perspective de dossier parent ).

Maintenant, revenons à votre question: sur mon TortoiseSVN (v1.9.5):

  • J'ai une option Supprimer
  • Je n'ai pas d'option Unversion, mais
  • J'ai une option Supprimer (garder local) - qui est (un meilleur nom peut-être pour) Unversion. En termes de ligne de commande, cela équivaut à svn delete --keep-local

Après avoir effectué l'une des actions sur un fichier, ce fichier ne sera plus suivi par svn, mais par opposition à Delete (où le fichier est également supprimé à partir du Working Copy/disk), Unversion le laissera sur le disque comme l'utilisateur l'aurait copié manuellement là-bas (un svn st "verra" le fichier comme étant hors contrôle de version: la première colonne sera un point d'interrogation (? ) comme décrit le [SVNBook]: svn status ).

[TortoiseSVN]: Supprimer, déplacer et renommer contient très peu d'informations officielles.

Personnellement, je ne vois aucune utilité à conserver le fichier local sauf pour corriger une erreur, par exemple supprimer les éléments précédemment validés qui n'appartiennent pas au référentiel (spécifiques à l'utilisateur) comme:

  • Eclipse: . Classpath, . Project
  • PyCharm: . Idée
  • VStudio: . Vcxproj.user

Citation de [SVNBook]: svn delete :

Utilisez l'option --keep-local pour remplacer le comportement de suppression svn par défaut, qui consiste également à supprimer le fichier cible prévu pour la suppression versionnée. Cela est utile lorsque vous réalisez que vous avez accidentellement validé l'ajout d'un fichier que vous devez conserver dans votre copie de travail, mais qui n'aurait pas dû être ajouté au contrôle de version.

4
CristiFati