31 votes

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

Cela sonne comme une look-up-dans-la-manuel de question pour moi, mais je ne le trouve pas. Supposons que nous avons un référentiel avec des fichiers et des répertoires qui ne devrait pas être sous contrôle de version, mais devrait plutôt être sur la liste noire (comme Eclipse fichiers .settings, .project, a généré les fichiers de documentation - des choses qui ne devraient jamais ont été ajoutés et engagé la première place). Quel est le meilleur moyen de la suppression de ces fichiers à partir du référentiel et en les déplaçant directement sur la liste des ignorés?

Mise à jour: La accepté de répondre ci-dessous les coordonnées d'un bon moyen de la configuration de votre local dépôts subversion pour éviter le problème décrit ci-dessus. Toutefois, si vous avez encore pour résoudre ce problème, il semble que vous avez à faire un peu manuel tripoter pour obtenir des fichiers/dossiers depuis le dépôt et sur la liste des ignorés.

Par exemple, pour l' .settings le dossier, d'abord l'ajouter à la mondiale ignore liste, 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" .

Cette copie le fichier/dossier vers un emplacement temporaire puis le supprime de SVN et s'engage à la retirer - enfin le fichier/dossier est copié de retour, mais comme il est maintenant sur la liste noire, il sera ignoré par SVN.

31voto

Jason Coco Points 52303

Il y a deux façons de subversion, l'un est spécifique à l'utilisateur et l'autre est en fait maintenu dans le référentiel, et, par conséquent, affecte tout le monde.

Pour une liste à l'échelle mondiale les fichiers ignorés (exclusif à chaque utilisateur/machine), vous devez modifier la subversion fichier de config et modifier le mondial-ignore la directive dans le florilège de la section. Le fichier de configuration est documentée et la syntaxe est très simple. Par exemple:

global-ignores = *.o

Sur un système UNIX, le fichier de config est trouvé à la ~/.subversion/config. Sur un système Windows, le fichier de config est trouvé à la %APPDATA%\Subversion\config ou dans le registre en vertu de l' HKCU\Software\Tigris.org\Subversion\Config.

Une fois que vous avez cela, vous n'aurez plus jamais accidentellement ajouter ces fichiers à votre référentiel, ni les fichiers apparaissent comme ? dans votre svn stat des commandes. Si votre dépôt a ces fichiers, il ne sera probablement pas de mal à les laisser là où ils sont, mais les changements et les modifications des fichiers sera ignorée dans l'avenir.

Pour cela sur une base par projet (qui va affecter n'importe qui de vérifier le projet), vous devez ajouter la propriété svn:ignore les répertoires de projet, où les fichiers sont susceptibles d'être stockées. Par exemple, pour exclure un répertoire nommé build à partir du niveau supérieur de votre projet, vous voulez faire quelque chose comme ceci:

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

À partir de maintenant, le répertoire de compilation de votre projet seront ignorés par la subversion. Pour en savoir plus, consultez la documentation à http://subversion.tigris.org/ ou de la question de l' svn help de commande pour plus d'informations.

EDIT: Ajout de plus basé sur les commentaires... je ne sais pas comment j'ai raté cette partie de la question d'origine!! Désolé :)

Malheureusement, en supprimant les fichiers que vous voulez maintenant ignoré à partir du référentiel est un processus manuel, même si, si vous savez exactement quels fichiers ils sont, vous pouvez écrire un petit script que les personnes ayant ce problème pourrait exécuter (dans le futur, la propriété svn:ignore les empêcherait de continuer à avoir jamais de le répéter, et il a l'avantage de pouvoir être facilement modifiés que lorsque le besoin s'en fait sentir).

Pour supprimer les fichiers que vous ne voulez pas partir du référentiel, mais garder le local de fichiers, procédez comme suit:

  1. Créer votre mondiale-ignore entrée ou ajouter de la propriété svn:ignore à votre référentiel et de s'engager.
  2. Pour chaque fichier que vous souhaitez supprimer à partir du référentiel, tapez cette commande: svn rm --keep-local
  3. Une fois que vous avez émis l' filename commande pour chaque fichier, valider votre copie de travail.

Parce que cela peut avoir pour effet secondaire de la suppression des fichiers de personnes copies de travail, s'ils n'ont pas mis à jour leurs fichiers de configuration, je recommande fortement d'utiliser la propriété svn:ignore sur le référentiel des répertoires. De cette façon, quand les gens de mise à jour, ils ne seront pas de façon inattendue avez des fichiers supprimés parce qu'ils n'ont pas modifié leur paramètre encore.

7voto

eaykin Points 1590

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

5voto

Kevin Davis Points 1470
 svn remove filename
 

Ignorer:

 svn propset svn:ignore filename|pattern
 

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

0voto

Mark Steudel Points 696

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 d'exporter 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" .
 

Quoi qu'il en soit, juste une pensée ...

-2voto

Keltia Points 8104

Si vous voulez qu'ils disparaissent pour toujours (ou jusqu'à ce que vous les ajoutiez vous-même), vous svn rm les, commi cela et ajoutez-les à .svnignore .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X