Supprimer, déplacer et renommer

À la différence de CVS, Subversion permet de renommer et de déplacer des fichiers et des dossiers. Il y a donc des entrées de menu pour supprimer et renommer dans le sous-menu de TortoiseSVN.

Figure 5.28. Menu contextuel de l'explorateur pour les fichiers non versionnés

Menu contextuel de l'explorateur pour les fichiers non versionnés


Supprimer des fichiers et des dossiers

Use TortoiseSVNDelete to remove files or folders from subversion.

When you TortoiseSVNDelete a file, it is removed from your working copy immediately as well as being marked for deletion in the repository on next commit. The file's parent folder shows a « deleted » icon overlay. Up until you commit the change, you can get the file back using TortoiseSVNRevert on the parent folder.

When you TortoiseSVNDelete a folder, it remains in your working copy, but the overlay changes to indicate that it is marked for deletion. Up until you commit the change, you can get the folder back using TortoiseSVNRevert on the folder itself. This difference in behaviour between files and folders is a part of Subversion, not TortoiseSVN.

If you want to delete an item from the repository, but keep it locally as an unversioned file/folder, use Extended Context MenuDelete (keep local). You have to hold the Shift key while right clicking on the item in the explorer list pane (right pane) in order to see this in the extended context menu.

Si un fichier est supprimé via l'explorateur au lieu d'utiliser le menu contextuel TortoiseSVN, la boîte de dialogue Livrer affiche ces fichiers et vous laisse aussi les supprimer du contrôle de version avant la livraison. Cependant, si vous mettez à jour votre copie de travail, Subversion découvrira le fichier manquant et le remplacera par la dernière version du référentiel. Si vous devez supprimer un fichier sous contrôle de version, utilisez toujours TortoiseSVNSupprimer pour que Subversion n'ait pas à deviner ce que vous voulez vraiment faire.

Si un dossier est supprimé via l'explorateur au lieu d'utiliser le menu contextuel TortoiseSVN, votre copie de travail sera cassée et vous serez incapables de livrer. Si vous mettez à jour votre copie de travail, Subversion remplacera le dossier manquant avec la dernière version du référentiel et vous pourrez alors le supprimer correctement en utilisant TortoiseSVNSupprimer.

Récupérer un fichier ou un répertoire supprimé

Si vous avez supprimé un fichier ou un dossier et avez déjà livré cette opération de suppression au référentiel, alors un normal TortoiseSVNRevenir en arrière normal ne peut plus le ramener. Mais le fichier ou le dossier n'est pas perdu pour autant. Si vous connaissez la révision où le fichier ou le dossier a été supprimé (sinon, utilisez la boîte de dialogue Journal pour le savoir) ouvrez le navigateur de référentiel et allez à cette révision. Choisissez alors le fichier ou le dossier que vous avez supprimé, faites un clic-droit et choisissez Menu contextuelCopier vers... et comme cible pour cette opération de copie, choisissez le chemin de votre copie de travail.

Déplacer des fichiers et des dossiers

If you want to do a simple in-place rename of a file or folder, use Context MenuRename... Enter the new name for the item and you're done.

If you want to move files around inside your working copy, perhaps to a different sub-folder, use the right-mouse drag-and-drop handler:

  1. sélectionnez les fichiers ou les répertoires que vous voulez déplacer

  2. glissez-déposer avec le bouton droit ceux-ci au nouvel emplacement à l'intérieur de la copie de travail

  3. relâchez le bouton droit de la souris

  4. Dans le menu qui apparaît, sélectionnez Menu contextuelSVN Déplacer les fichiers dans Subversion ici

Livrez le répertoire parent

Since renames and moves are done as a delete followed by an add you must commit the parent folder of the renamed/moved file so that the deleted part of the rename/move will show up in the commit dialog. If you don't commit the removed part of the rename/move, it will stay behind in the repository and when your co-workers update, the old file will not be removed. i.e. they will have both the old and the new copies.

Vous devez livrer un renommage de dossier avant de changer l'un des fichiers de ce dossier, autrement votre copie de travail peut être vraiment salie.

You can also use the repository browser to move items around. Read la section intitulée « Le navigateur de référentiel » to find out more.

Ne faites pas SVN Déplacer sur les externes

Vous ne devriez pas utiliser les commandes Déplacer ou Renommer de TortoiseSVN sur un dossier qui a été créé en utilisant svn:externals. Cette action causerait la suppression de l'élément externe de son référentiel parent, en dérangeant probablement beaucoup d'autres personnes. Si vous devez déplacer un dossier externe, vous devez utiliser un déplacement ordinaire, ajuster ensuite les propriétés svn:externals des répertoires parents de la source et de la destination.

Changing case in a filename

Making case-only changes to a filename is tricky with Subversion on Windows, because for a short time during a rename, both filenames have to exist. As Windows has a case-insensitive file system, this does not work using the usual Rename command.

Fortunately there are (at least) two possible methods to rename a file without losing its log history. It is important to rename it within subversion. Just renaming in the explorer will corrupt your working copy!

Solution A) (recommandée)

  1. Livrez les changements dans votre copie de travail.

  2. Renommez le fichier MAJUScules en majusCULES directement dans le référentiel en utilisant le navigateur de référentiel.

  3. Mettez à jour votre copie de travail.

Solution B)

  1. Renommer MAJUScules en MAJUScules_ avec la commande renommer du sous-menu TortoiseSVN.

  2. Livrez les changements.

  3. Renommer de MAJUScules_ en majusCULES.

  4. Livrez les changements.

Dealing with filename case conflicts

If the repository already contains two files with the same name but differing only in case (e.g. TEST.TXT and test.txt), you will not be able to update or checkout the parent directory on a Windows client. Whilst Subversion supports case-sensitive filenames, Windows does not.

This sometimes happens when two people commit, from separate working copies, files which happen to have the same name, but with a case difference. It can also happen when files are committed from a system with a case-sensitive file system, like Linux.

Dans ce cas, vous devez décider lequel des deux vous voulez conserver et supprimer (ou renommer) l'autre du référentiel.

Éviter que deux fichiers aient le même nom

Il existe un script hook pour le serveur disponible à : http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ qui préviendra les livraisons qui résultent en conflits de casse.

Réparer les renommages de fichier

Sometimes your friendly IDE will rename files for you as part of a refactoring exercise, and of course it doesn't tell Subversion. If you try to commit your changes, Subversion will see the old filename as missing and the new one as an unversioned file. You could just check the new filename to get it added in, but you would then lose the history tracing, as Subversion does not know the files are related.

A better way is to notify Subversion that this change is actually a rename, and you can do this within the Commit and Check for Modifications dialogs. Simply select both the old name (missing) and the new name (unversioned) and use Context MenuRepair Move to pair the two files as a rename.

Supprimer les fichiers non versionnés

Usually you set your ignore list such that all generated files are ignored in Subversion. But what if you want to clear all those ignored items to produce a clean build? Usually you would set that in your makefile, but if you are debugging the makefile, or changing the build system it is useful to have a way of clearing the decks.

TortoiseSVN provides just such an option using Extended Context MenuDelete unversioned items.... You have to hold the Shift while right clicking on a folder in the explorer list pane (right pane) in order to see this in the extended context menu. This will produce a dialog which lists all unversioned files anywhere in your working copy. You can then select or deselect items to be removed.

When such items are deleted, the recycle bin is used, so if you make a mistake here and delete a file that should have been versioned, you can still recover it.