web-dev-qa-db-fra.com

Comment ignorer un répertoire avec SVN?

Je viens de commencer à utiliser SVN et j'ai un répertoire de cache dont je n'ai pas besoin sous contrôle de source. Comment puis-je ignorer tout le répertoire/dossier avec SVN?

J'utilise versions et TextMate sous OS X et en ligne de commande.

747
Gilean

Définissez la propriété svn:ignore du répertoire parent:

svn propset svn:ignore dirname .

Si vous devez ignorer plusieurs éléments, séparez-les par des lignes nouvelles dans la valeur de la propriété. Dans ce cas, il est plus facile de modifier la valeur de la propriété à l'aide d'un éditeur externe:

svn propedit svn:ignore .
788
Jason Cohen

Voici un exemple de structure de répertoire:

\project
    \source
    \cache
    \other

Lorsque vous êtes dans project, vous voyez que votre répertoire de cache n’est pas ajouté et s’affiche comme tel.

> svn st
M  source
?  cache

Pour définir la propriété ignore, faites

svn propset svn: ignorer le cache.

svn:ignore est le nom de la propriété que vous définissez, cache est la valeur de la propriété et . est le répertoire sur lequel vous définissez cette propriété. Il doit s'agir du répertoire parent du répertoire cache qui nécessite la propriété.

Pour vérifier quelles propriétés sont définies:

> svn proplist
Properties on '.':
  svn:ignore

Pour voir la valeur de svn:ignore:

> svn propget svn:ignore
cache

Pour supprimer les propriétés précédemment définies:

svn propdel svn:ignore
404
craigb

Important à mentionner:

Sur la ligne de commande, vous ne pouvez pas utiliser

svn add *

Cela ajoutera également les fichiers ignorés, car la ligne de commande développe * et donc svn add croit que vous souhaitez que tous les fichiers soient ajoutés. Utilisez donc ceci à la place:

svn add --force .
130
binco

Comme j'ai passé un certain temps à essayer de faire fonctionner cela, il convient de noter que si les fichiers existent déjà dans SVN, vous devez les svn delete, puis éditer la propriété svn:ignore.

Je sais que cela semble évident, mais ils continuaient à apparaître sous la forme ? dans ma liste svn status, alors que je pensais que cela les ignorerait localement.

79
Kai

Pour développer légèrement, si vous faites cela avec l'outil de ligne de commande svn, vous voulez taper:

svn propedit svn:ignore path/to/dir

qui va ouvrir votre éditeur de texte de choix, puis tapez '*' pour tout ignorer, et enregistrez + quitter - cela inclura le répertoire lui-même dans svn, mais ignorera tous les fichiers qu'il contient, pour ignorer le répertoire, utilisez la commande chemin du parent, puis tapez le nom du répertoire dans le fichier. Après la sauvegarde, lancez une mise à jour ('svn up'), puis enregistrez le chemin approprié.

70
Greg

Définissez la propriété svn:ignore sur le répertoire parent:

$ cd parentdir
$ svn ps svn:ignore . 'cachedir'

Cela écrasera toute valeur actuelle de svn:ignore. Vous pouvez éditer la valeur avec:

$ svn pe svn:ignore .

Ce qui ouvrira votre éditeur. Vous pouvez ajouter plusieurs modèles, un par ligne.

Vous pouvez afficher la valeur actuelle avec:

$ svn pg svn:ignore .

Si vous utilisez une interface graphique, il devrait y avoir une option de menu pour le faire.

28
Frank Szczerba

Merci pour toutes les contributions ci-dessus. J'aimerais simplement partager des informations supplémentaires issues de mes expériences tout en ignorant les fichiers.


Lorsque les dossiers sont déjà sous contrôle de révision

Après svn import et svn co les fichiers, ce que nous faisons habituellement pour la première fois.

Tous les dossiers de pièces jointes et de cache d'exécution seront sous contrôle de version. donc, avant svn ps svn: ignore , nous devons le supprimer du référentiel.

Avec SVN version 1.5 ci-dessus, nous pouvons utiliser svn del --keep-local your_folder, mais pour une version antérieure, ma solution est la suivante:

  1. svn export une copie vierge de vos dossiers (sans .svn dossier caché)
  2. svn del le local et le dépôt,
  3. svn ci
  4. Recopier les dossiers
  5. Faites svn st et confirmez que les dossiers sont marqués de la manière suivante: '?'
  6. Maintenant nous pouvons faire svn ps en fonction des solutions

Lorsque plusieurs dossiers doivent être ignorés

  • Dans un répertoire, j'ai deux dossiers qui doivent être définis comme svn:ignore
  • Si nous en définissons un, l'autre sera supprimé.
  • Alors nous nous demandons nous avons besoin svn pe

svn pe devra éditer le fichier texte. Vous pouvez utiliser cette commande si nécessaire pour définir votre éditeur de texte à l'aide de vi :

export SVN_EDITOR=vi
  1. Avec "o" vous pouvez ouvrir une nouvelle ligne
  2. Tapez tous les noms de dossiers que vous souhaitez ignorer
  3. Appuyez sur la touche "échap" pour sortir du mode édition
  4. Tapez ": wq" puis tapez Enter pour sauver et quitter

Le fichier ressemble à quelque chose comme ceci:

runtime
cache
attachments
assets
20
Elliot Yap

Enlevez-le d'abord ...

Si votre répertoire foo est déjà sous contrôle de version, supprimez-le d'abord avec:

svn rm --keep-local foo

... alors ignorer:

svn propset svn:ignore foo .
19
matt burns

... et si vous souhaitez ignorer plusieurs répertoires (par exemple, fichiers build/temp/ et *.tmp), vous pouvez le faire en deux étapes (en ignorant le premier et en modifiant les propriétés (voir les autres réponses ici) ou on pourrait écrire quelque chose comme

svn propset svn:ignore "build
temp
*.tmp" .

sur la ligne de commande.

12
DerMike

Si vous utilisez le client SVN particulier TortoiseSVN , lors de la validation, vous avez la possibilité de cliquer avec le bouton droit de la souris sur les éléments et de sélectionner "Ajouter pour ignorer la liste".

11
Michael Lang

La commande pour ignorer plusieurs entrées est un peu délicate et nécessite des barres obliques inverses.

svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .

Cette commande ignore tout ce qui est nommé cache, tmp, null et and_so_on dans le répertoire en cours.

7
James Stroud

J'ai eu du mal à ignorer les répertoires imbriqués; le répertoire principal que je voulais ignorer ne s'afficherait pas avec "svn status", mais tous les sous-répertoires le faisaient. Cela va probablement de soi pour tout le monde, mais je pensais le partager:

EXEMPLE:

/tronc

/ trunk/cache

/ trunk/cache/subdir1

/ trunk/cache/subdir2

cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci
5
brainycat

"Merci" svn pour un moyen aussi hideux, factice et difficile d’ignorer des fichiers.

J'ai donc écrit un script (svn-ignore-all :

#!/bin/sh

# svn-ignore-all

# usage: 
#   1. run svn status to see what is going on at each step 
#   2. add or commit all files that you DO want to have in svn
#   3. remove any random files that you don't want to svn:ignore
#   4. run this script to svn:ignore everything marked '?' in output of `svn status`

svn status |
grep '^?' |
sed 's/^? *//' |
while read f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

En outre, pour ignorer une liste spécifique de fichiers/chemins d'accès, nous pouvons utiliser cette variante svn-ignore . Je suppose que svn-ignore-all devrait vraiment être comme xargs svn-ignore.

#!/bin/sh

# svn-ignore

# usage:
#   svn-ignore file/to/ignore ...

for f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

Une dernière chose: j’ai tendance à polluer mes svn checkouts avec de nombreux fichiers aléatoires. Quand il est temps de valider, je déplace ces fichiers dans un "ancien" sous-répertoire et dis à svn d'ignorer "ancien".

4
Sam Watkins

Bash un liner pour plusieurs ignore:

svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"
4
Fedir RYKHTIK

POUR CONSERVER DES ANNUAIRES QUE SVN IGNORERA:

  1. cela supprimera les fichiers du référentiel, mais gardera le répertoire sous contrôle SVN:

svn delete --keep-local path/directory_to_keep/*

  1. puis mis à ignorer le répertoire (et tout le contenu):

svn propset svn: ignorer "*" chemin/répertoire_à_charger

3
sheasie

Si votre répertoire de projet s'appelle/Project et que votre répertoire de cache s'appelle/Project/Cache, vous devez définir une propriété Subversion sur/Project. Le nom de la propriété doit être "svn: ignore" et la valeur de la propriété doit être "Cache".

Reportez-vous à la page this du manuel Subversion pour plus d'informations sur les propriétés.

3
The Digital Gabeg

La réponse de Jason fera l'affaire. Cependant, au lieu de définir svn: ignore à "." sur le répertoire de cache, vous pouvez inclure "cache" dans la propriété svn: ignore du répertoire parent, au cas où le répertoire de cache ne serait pas toujours présent. Je le fais sur un certain nombre de dossiers "jetables".

3
harpo

Si vous utilisez une interface pour SVN telle que TortoiseSVN, ou une sorte d'intégration IDE, il devrait également y avoir une option ignore dans le même menu qui correspond à l'opération commit/add.

2
Chris Marasti-Georg

Puisque vous utilisez des versions, c'est très simple:

  • Parcourez votre copie extraite
  • Cliquez sur le répertoire à ignorer
  • Dans la case "Ignorer" du clic droit Modifier
  • Tapez *. * Pour ignorer tous les fichiers (ou * .jpg pour seulement des fichiers jpg, etc.)
1
Andrew

Définissez le svn: ignore propriété . La plupart des outils d'interface utilisateur svn ont un moyen de le faire, ainsi que la discussion en ligne de commande dans le lien.

1
Joe Skora

Résolu avec Eclipse de la manière suivante:

Tout d’abord, synchronisez votre dossier avec le projet:

équipe -> synchroniser

Dans la vue suivante, vue d'équipe, vous pouvez voir toutes les ressources que vous pouvez engager sur le serveur SVN.

Alors, sélectionnez le dossier de ressources de la ressource que vous voulez ignorer, puis vous pouvez l’ignorer en utilisant

équipe -> ajouter à svn:ignore.

Ensuite, dans la fenêtre de confirmation, sélectionnez la première option: "ignorer par nom".

Par exemple, si je veux ignorer le dossier cible et leurs ressources .class, je le synchronise et, dans la vue Synchroniser, je sélectionne le dossier cible. Après cela, je vais sélectionner

équipe-> ajouter

sur svn:ignore puis je confirmerai la première option dans la fenêtre de confirmation.

1
Antonio Martin

Regardez aussi vos barres obliques. J'ai constaté que l'inclusion de images/* dans mon fichier de paramètres Ignorer n'ignorait pas ./images/. Quand j'ai lancé svn status -u, il affichait toujours ? images. Donc, je viens de changer le paramètre ignorer pour simplement images, pas de barre oblique. A couru un contrôle de statut et cela l'a effacé.

1
cdmo

Après avoir perdu beaucoup de temps à chercher comment faire cette activité simple, j'ai décidé de poster, il n'était pas difficile de trouver une explication décente.

Laissez d'abord la structure de l'échantillon

$ svn st? projet/coffre/cible? project/trunk/myfile.x

1 - configurez d'abord l'éditeur, dans mycase vim export SVN_EDITOR = vim

2 - “svn propedit svn: ignorer projet/coffre /” ouvrira un nouveau fichier et vous pourrez ajouter vos fichiers et sous-répertoires dans le type de cas américain “cible” enregistrer et fermer le fichier et les travaux.

$ svn st? project/trunk/myfile.x

merci.

0
Bruno