web-dev-qa-db-fra.com

Comment supprimer un fichier du contrôle de version sans le supprimer?

Si je cours svn rm file, le fichier est supprimé de la copie de travail locale.

Ce que je fais maintenant c'est:

$ cp file file2
$ svn rm file
$ svn ci
$ mv file2 file

Comment puis-je éviter que svn supprime également le fichier local en utilisant svn rm?

125
Juanjo Conti

Vous voulez le --keep-local option de ligne de commande. Cela supprime le fichier du contrôle de version sans le supprimer de votre système de fichiers.

$ svn rm --keep-local my_important_file

Note: Le --keep-local n'affecte que le svn rm de votre copie. D'autres utilisateurs peuvent avoir leur propre copie locale du fichier supprimée, sauf en cas de conflit entre leur copie locale et le référentiel en raison de modifications apportées. Cela peut ne pas être le résultat souhaité. Voir les commentaires ci-dessous.

268
Andres Jaan Tack

Supprimer un fichier de SVN sans le supprimer localement n’est un problème courant. Un exemple frappant est le fichier .classpath dans un projet Eclipse. Mettre ce fichier de configuration sous SVN est merveilleux tant que toutes les machines utilisées dans le projet ont les mêmes installations Eclipse et Java. Une fois cette condition violée, les commits commencent à casser d’autres projets Eclipse. C’est le vous devez supprimer un fichier de SVN sans le supprimer nulle part.

svn rm --keep-local .classpath

fait le travail parfaitement sur une machine et à ce moment-là.

Le problème est que d'autres machines risquent de perdre ce fichier (lors de la mise à jour) ou de le ressusciter (lors de la validation). Le défaut de SVN est de ne pas manipuler --keep-local dans le référentiel ni à le propager à d’autres copies de travail. Par conséquent, sur toutes les autres machines ci-dessus, la commande doit être exécutée - mieux avant toute validation ou mise à jour.

Cela fonctionnera bien entendu à 90% au mieux. Les suppressions et les versions révisées se produiront soudainement. Ma solution est d’avoir chaque machine, j’ai un accès direct ou indirect à

svn rm --keep-local .classpath
copy .classpath .classpath-nameOfTheMachine
svn add .classpath-nameOfTheMachine

C’est si carrément moche que l’on n’appelle guère cette "solution". Néanmoins, cela permettait toujours de réparer rapidement les accidents ultérieurs.

12
Albrecht Weinert