web-dev-qa-db-fra.com

Comment supprimer un fichier/dossier d'un référentiel SVN et l'ajouter à la liste des ignorés

Cela ressemble à une question de consultation manuelle, mais je ne la trouve pas. Supposons que nous ayons un référentiel contenant des fichiers et des répertoires qui ne devraient pas être sous contrôle de version, mais plutôt dans la liste des ignorés (tels que les fichiers Eclipse .settings, .project, les fichiers de documentation générés - éléments qui n'auraient jamais dû être ajoutés et validés la première place). Quel est le meilleur moyen de supprimer ces fichiers du référentiel et de les déplacer directement dans la liste des ignorés?

Mise à jour: La réponse acceptée ci-dessous détaille un bon moyen de configurer vos référentiels Subversion locaux pour éviter le problème décrit ci-dessus. Cependant, si vous devez toujours résoudre ce problème, il semble que vous deviez effectuer quelques manipulations manuelles pour extraire les fichiers/dossiers du référentiel et les placer dans la liste des ignorés. 

Par exemple, pour le dossier .settings, ajoutez d'abord ceci à la liste globale des ignores, puis exécutez la commande suivante:

$REMOVE=".settings"
cp -r "$REMOVE" /tmp/ && \
svn rm "$REMOVE" && \
svn commit -m "Moving to ignore list" "$REMOVE" && \ 
mv "/tmp/$REMOVE" .

Cela copie le fichier/dossier dans un emplacement temporaire, puis le supprime de SVN et valide la suppression. Enfin, le fichier/dossier est recopié, mais comme il figure maintenant dans la liste des ignorés, il sera ignoré par SVN.

31
DavidWinterbottom

Subversion peut être utilisé de deux manières: l’une est spécifique à l’utilisateur et l’autre est maintenue dans le référentiel, et affecte donc tout le monde.

Pour obtenir une liste des fichiers globalement ignorés (propres à chaque utilisateur/ordinateur), vous devez éditer le fichier de configuration Subversion et modifier la directive global-ignores dans la section divers}. Le fichier de configuration est documenté et la syntaxe est très simple. Par exemple:

global-ignores = *.o

Sur un système UNIX, le fichier de configuration se trouve à ~/.Subversion/config. Sur un système Windows, le fichier de configuration se trouve à %APPDATA%\Subversion\config ou dans le registre sous HKCU\Software\Tigris.org\Subversion\Config.

Une fois que vous avez configuré cela, vous n’ajouterez jamais accidentellement ces fichiers à votre référentiel, pas plus qu’ils ne s’afficheront sous la forme ? dans vos commandes svn stat. Si votre référentiel contient déjà ces fichiers, il ne vous fera probablement pas de mal de les laisser tels quels, mais les modifications et les modifications apportées aux fichiers seront ignorées à l'avenir.

Pour configurer cela projet par projet (ce qui affectera quiconque extrait le projet), vous devez ajouter la propriété svn: ignore aux répertoires du projet dans lesquels les fichiers sont susceptibles d'être stockés. Par exemple, pour exclure un répertoire nommé build du niveau supérieur de votre projet, procédez comme suit:

svn propset svn:ignore 'build' .
svn commit -m 'project ignores build directory' .

A partir de maintenant, le répertoire de construction de votre projet sera ignoré par Subversion. Pour plus d'informations à ce sujet, voir la documentation à http://Subversion.tigris.org/ ou émettez la commande svn help pour plus d'informations.

EDIT: Ajouté plus basé sur le commentaire ... ne sais pas comment j'ai raté cette partie de la question initiale !! Désolé :)

Malheureusement, supprimer les fichiers que vous voulez maintenant ignorer du référentiel est un processus manuel, bien que, si vous savez exactement quels fichiers ils sont, vous pourriez écrire un petit script que les personnes ayant ce problème pourraient exécuter (à l'avenir, svn: ignorer la propriété les empêcherait de devoir la répéter, et présente l’avantage de pouvoir être facilement modifié lorsque le besoin s’en fait sentir).

Pour supprimer les fichiers non souhaités du référentiel tout en conservant les fichiers locaux, procédez comme suit:

  1. Créez votre entrée global-ignore ou ajoutez la propriété svn: ignore à votre référentiel et validez.
  2. Pour chaque fichier que vous souhaitez supprimer du référentiel, exécutez cette commande: svn rm --keep-local filename
  3. Une fois que vous avez émis la commande svn rm pour chaque fichier, validez votre copie de travail.

Étant donné que cela peut avoir pour effet secondaire de supprimer des fichiers des copies de travail actuelles des personnes qui n'ont pas mis à jour leurs fichiers de configuration, je vous recommande vivement d'utiliser la propriété svn: ignore dans les répertoires du référentiel. Ainsi, lors de la mise à jour, les fichiers ne seront pas supprimés de manière inattendue, car ils n'ont pas encore modifié leur paramètre global-ignores.

30
Jason Coco

J'ai pu le faire en utilisant l’outil TortoiseSVN . Ils fournissent une option de clic droit nommée: "Supprimer et ajouter à ignorer la liste".

6
eaykin
svn remove filename

Ignorer: 

svn propset svn:ignore filename|pattern

Voir aussi Comment… faire en sorte que Subversion ignore les fichiers et les dossiers.

4
Kevin Davis

Merci pour cette réponse exactement ce dont j'avais besoin. Une pensée sur le script final décrit ci-dessus, ne serait-il pas préférable dans votre script de faire une exportation svn au lieu de cp -R? De cette façon, vous obtiendrez des dossiers propres sans aucun des dossiers .svn. 

par exemple. 

$REMOVE=".settings"
svn export "$REMOVE" /tmp/ && \
svn rm "$REMOVE" && \
svn commit -m "Moving to ignore list" "$REMOVE" && \ 
mv "/tmp/$REMOVE" .

En tout cas juste une pensée ...

0
Mark Steudel