web-dev-qa-db-fra.com

SVN: Ignorer certains répertoires de manière récursive

Je ne souhaite pas qu'un répertoire nommé build ou dist entre dans mon SVN, quelle que soit sa profondeur dans l'arborescence.

Est-ce possible? En git je viens de mettre

build
dist

dans mon .gitignore à la racine et il ignore de manière récursive. Comment puis-je faire cela avec svn? S'il vous plaît ne me dites pas de faire un propset sur chaque dir de parent ...

99
Paul Tarjan

Depuis Subversion 1.8, il y a maintenant le svn:global-ignores propriété qui fonctionne comme svn:ignore mais de manière récursive (donc définissez ceci sur votre répertoire de niveau supérieur)

51
twin

svn propset prend --recursive en option, vous pouvez donc le faire avec deux inconvénients:

  1. vous devez extraire l'intégralité du référentiel (ou au moins tous les répertoires qu'il contient), et
  2. vous devez vous rappeler de régler le svn:ignore propriété chaque fois que vous ajoutez un nouveau répertoire
44
Michael Hackner

Ce n'est pas possible de faire cela. Il n'y a que deux mécanismes ignorés dans Subversion, svn:ignore (qui est non récursif) et global-ignores (qui n'est pas spécifique à un référentiel).

41
Kevin Reid

Cela fonctionne pour moi:

 svn propset --recursive svn:ignore *.Zip <dir_tree_with_no_zips>
16
Stewart

ajoutez à votre fichier ~/.Subversion/config ou/etc/Subversion/config:

[miscellany]
global-ignores = build dist
12
jspcal

Il est possible d'ignorer les répertoires build et dist en supprimant les répertoires du contrôle de version. L'astuce consiste à utiliser l'option --keep-local pour laisser le répertoire dans la copie de travail. Par exemple:

svn rm dist --keep-local
svn ci -m'removed build directory from version control'

Le répertoire ne sera plus suivi par Subversion mais il sera toujours présent dans votre copie de travail pour contenir la sortie du compilateur, etc.

à bientôt, joe

8
jsharit

Par exemple, la structure du dossier:

Project/
Project/dist/

cd Project
svn propset svn:ignore '*' dist/
svn ci -m "content of dist ignored"

Il est bon de supprimer svn du contenu dist avant la commande ignore. Ainsi, dist sera vide pour les branches.

Travaillé pour moi, testé aujourd'hui. Voici la page l'expliquant un pe

6
marian

Vous devez d'abord vous déplacer vers le dossier principal de votre copie de travail et créer un fichier (par exemple, .svnignore) dans lequel vous devez placer tous les motifs que vous souhaitez ignorer, par exemple (pour un projet Android):

bin
gen
proguard
.classpath
.project
local.properties
Thumbs.db
*.apk
*.ap_
*.class
*.dex

Ensuite, vous exécutez la commande suivante (souvenez-vous que vous devez être dans le dossier supérieur de votre copie de travail):

svn propset svn:ignore -R -F .svnignore .

Cela ne fonctionnera que pour les dossiers et les fichiers qui ne sont pas encore sous contrôle de version. Si vous souhaitez qu'un dossier (ou un fichier) en cours de traitement commence également à être ignoré, supprimez-le du contrôle de version en exécutant la commande suivante:

svn rm --keep-local <path>

Vous avez tout cela dans cet article qui explique tout: http://superchlorine.com/2013/08/getting-svn-to-ignore-files-and-directories/

5
Luccas Correa

Pour ignorer tous ces fichiers dans tous les référentiels, vous pouvez ajouter un fichier global-ignores dans votre fichier de configuration par utilisateur.

Sur les systèmes de type Unix, cette zone apparaît sous la forme d'un répertoire nommé. Subversion dans le répertoire personnel de l'utilisateur. Sur les systèmes Win32, Subversion crée un dossier nommé Subversion, généralement situé dans la zone Données d'application du répertoire de profil de l'utilisateur.

Voir Options de configuration

Malheureusement, il n'y a pas d'option par référentiel pour faire cela. C'est fondamentalement par utilisateur, ou par répertoire, donc le multiple svn:ignores est probablement la voie à suivre, aussi agaçante qu’elle puisse être.

5
Blair Conrad

Dans Subversion 1.8 ci-dessus, il est possible de définir global-ignores pour le référentiel actuel.

svn propset svn:global-ignores build .
svn propset svn:global-ignores dist .

Vous pouvez également créer un dossier nommé .svnignore et des conditions d'écriture.

build
dist

rappelez-vous une condition par ligne, les configurations build/* ou dist/debug sont vaines. Ensuite, faites la commande:

svn propset svn:global-ignores -F .svnignore .
4
John Zhu

Créez un fichier et ajoutez-y vos ignores

ingore-list:

file1 
directory1
file2
etc...

puis appliquez la commande suivante

for n in directory; do svn propset svn:ignore -F ignore-list $n; done

répertoire est le nom de votre répertoire, vous pouvez également sous-catégoriser répertoire/sous-répertoire. Ou utilisez * pour noter le répertoire actuel dans lequel vous vous trouvez.

Ceci suppose que vous utilisez bash comme shell

2
jncc99
svn propset --recursive svn:ignore svn_ignore_rules .

où svn_ignore_rules est un fichier contenant les règles de non-respect - un par ligne

Bien sûr, vous devez le réexécuter chaque fois que vous ajoutez un nouveau répertoire à votre référentiel.

svn_ignore_rules peut également être considéré comme archivé dans le référentiel, pour pouvoir être réutilisé par d'autres utilisateurs disposant d'un accès en écriture au référentiel.

2
georg
 cd parent_dir #le répertoire contenant le dossier à ignorer récursivement 
 svn propedit svn: ignore. #will ouvrir svn-prop.tmp 
 enrôler un (des) dossier (s) 
 ^ X 
 Y 
 commettre -m 'ignorer le répertoire ciblé' 
1
Moin Haidar

Une solution consisterait à ajouter une sorte de vérification au point d'ancrage avant ou après validation, mais la note est simple si vous ne possédez pas le serveur de référentiel.

0
8DH

Comme il semble n'y avoir aucune solution à ce problème probablement commun, je voudrais partager notre solution. Comme les autres l’ont déjà indiqué, vous pouvez utiliser le svn:ignore propriété, cela s’applique à un seul répertoire (et donc pas aux nouveaux), ou vous utilisez global-ignores qui s'applique à un seul utilisateur (mais n'appartient pas au référentiel).

Pour rendre la vie un peu plus facile, j'ai créé un fichier reg nommé Settings.Svn.reg et l'a ajouté à la racine du référentiel. Maintenant, tout le monde peut double-cliquer sur ce fichier de configuration une fois, et les réglages sont effectués.

REGEDIT4

[HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\miscellany]
"global-ignores"="obj *.suo *.bak *.pdb *.user *.Cache*"

J'apprécierais vraiment une solution dans le référentiel SVN, alors si quelqu'un le sait, voudriez-vous la partager?

0
martinstoeckli