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

Réponses:

277

Vous voulez l' --keep-localoption 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

Remarque: le --keep-localseul affecte le svn rmde votre copie. Les autres utilisateurs peuvent faire supprimer leur propre copie locale du fichier, sauf en cas de conflit entre leur copie locale et le référentiel en raison des modifications qu'ils ont apportées. Ce n'est peut-être pas le résultat souhaité. Voir les commentaires ci-dessous.

Andres Jaan Tack
la source
4
Cela ne le supprimera-t-il pas encore des systèmes d'autres personnes une fois qu'ils sont mis à jour?
Nyerguds
1
@Nyerguds C'est correct, car le svn rm supprime les fichiers du référentiel. Si vous souhaitez supprimer des fichiers du référentiel, MAIS les conserver localement sur votre machine, vous utiliserez l'indicateur ci-dessus.
Greg Hilston
6
@GregHilston Comme je l'ai dit, cependant, cela n'aide pas vraiment dans les projets à plusieurs programmeurs. Il devrait y avoir un moyen d'annuler la version du fichier partout. Le cas le plus courant ici est celui des fichiers de paramètres locaux commis accidentellement (très courant dans les projets Java), mais le fait de les annuler ne devrait pas effacer les fichiers de paramètres des autres utilisateurs.
Nyerguds
5
@GregHilston "de vrais projets multi-programmeurs" était plutôt implicite dans "les systèmes des autres". Le problème est le suivant: d'autres personnes se mettent à jour et font remplacer leurs paramètres. Ce n'est généralement pas trop problématique, mais suffisamment ennuyeux pour vouloir le résoudre. Mais à ce stade, lorsqu'ils ont déjà écrasé les paramètres et reçoivent maintenant un svn "rm" lors de la mise à jour, cela supprime en fait le fichier de paramètres locaux potentiellement vitaux de leur système, alors qu'il devrait simplement être non versionné pour pouvoir être configuré en local paramètres à nouveau.
Nyerguds
4
Le rechargement d'un fichier plus ancien à partir du référentiel le marque comme étant de cette version plus ancienne, ce qui signifie qu'une mise à jour le supprimera simplement à nouveau. Il n'y a pas de moyen propre de le faire qui ne nécessite pas d'intervention manuelle sur toutes les machines du projet.
Nyerguds
13

Supprimer un fichier de SVN sans le supprimer localement n'est nulle part 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 la même installation Eclipse et Java. Une fois cette condition violée, les validations commencent à interrompre les autres projets Eclipse. C'est là que l'on doit supprimer un fichier de SVN sans le supprimer n'importe où.

svn rm --keep-local .classpath

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

Le problème est que d'autres machines peuvent perdre ce fichier (lors de la mise à jour) ou le ressusciter (lors de la validation). La faille de SVN n'est ni de gérer --keep-localdans le référentiel ni de le propager à d'autres copies de travail. Par conséquent, sur toutes les autres machines, la commande ci-dessus doit être exécutée - mieux avant toute validation ou mise à jour.

Ceci, bien sûr, fonctionnera à 90%, au mieux. Les suppressions et les révisions se produiront soudainement. Ma solution est d'avoir chaque machine, j'ai un accès direct ou indirect à, faire

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

C'est tellement moche qu'on l'appelle à peine une «solution». Néanmoins, il a toujours permis des réparations rapides de tout accident ultérieur.

Albrecht Weinert
la source
-3

Je n'ai pas de réponse à cette question précise, mais j'ai une réponse à une question connexe, qui est de savoir comment supprimer tous les fichiers (c'est-à-dire pas un fichier spécifique) dans un répertoire du contrôle de version sans les supprimer localement. Cette solution est issue d'une implémentation scientifique Linux.

ls -a .svn

devrait afficher le répertoire svn qui stocke les données de contrôle. Simplement:

rm -r .svn

se débarrassera de ce répertoire. Puis en tapant:

svn status

produira une erreur «avertissement: ce répertoire n'est pas une copie de travail», car il n'est plus sous contrôle de version.

J'espère que ça aide.

cjames
la source
Une question connexe? Supprimer un fichier et supprimer toute la copie de travail sont des choses totalement différentes à mon humble avis.
Melebius