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

Je ne veux pas qu’un répertoire nommé build ou dist entre dans mon SVN, quelle que soit sa profondeur.

Est-ce possible? En git je viens de mettre

 build dist 

dans mon .gitignore à la racine et il ignore récursivement. Comment puis-je faire cela avec svn? S’il vous plaît ne me dites pas de faire un propset sur chaque répertoire parent …

À partir de subversion 1.8, il y a maintenant la propriété svn:global-ignores qui fonctionne comme svn:ignore mais de manière récursive (définissez donc ceci dans votre répertoire racine)

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

  1. vous devez extraire le référentiel entier (ou au moins tous les répertoires), et
  2. vous devez vous rappeler de définir la propriété svn:ignore chaque fois que vous ajoutez un nouveau répertoire

Ce n’est pas possible. Il n’y a que deux mécanismes ignorés dans Subversion, svn:ignore (qui n’est pas récursif) et global-ignores (qui n’est pas spécifique à un repository).

Cela fonctionne pour moi:

  svn propset --recursive svn:ignore *.zip  

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

 [miscellany] global-ignores = build dist 

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 le résultat du compilateur, etc.

Cheers, Joe

Pour ignorer tous ces fichiers dans tous les référentiels, vous pouvez append un global-ignores à 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 de base 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 les options de configuration

Malheureusement, il n’y a pas d’option par repository pour ce faire. C’est essentiellement par utilisateur, ou par répertoire, donc le svn:ignores multiple est probablement la voie à suivre, aussi ennuyeuse que cela puisse être.

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 faire un svn delete de dist contenu avant la commande ignore, donc pour les twigs dist sera vide.

Travaillé pour moi, testé aujourd’hui. Voici la page l’expliquant un peu

Vous devez d’abord vous déplacer dans le dossier supérieur de votre copie de travail et y créer un fichier (par exemple, .svnignore) où 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 (rappelez-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) versionné soit également ignoré, supprimez-le du contrôle de version en exécutant la commande suivante:

 svn rm --keep-local  

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

Dans subversion 1.8, il est possible de définir des ignores globaux 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 écrire des conditions.

 build dist 

rappelez-vous une condition par ligne, en définissant build / * ou dist / debug est en vain. Ensuite, faites la commande:

 svn propset svn:global-ignores -F .svnignore . 

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 le classer dans un répertoire / sous-répertoire. Ou utilisez * pour noter le répertoire actuel sous lequel vous vous trouvez.

Cela suppose que vous utilisez bash comme shell

 svn propset --recursive svn:ignore svn_ignore_rules . 

où svn_ignore_rules est un fichier contenant les règles ignore – une par ligne

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

svn_ignore_rules peut également être considéré comme archivé dans le repository, pour pouvoir être réutilisé par d’autres utilisateurs ayant access en écriture au repository

Une solution consisterait à append une sorte de vérification au hook pré- ou post-commit, mais il est évident que si vous ne possédez pas le serveur repo.

Comme il semble n’y avoir aucune solution à ce problème probablement courant, j’aimerais partager notre solution. Comme les autres l’ont déjà dit, vous pouvez utiliser la propriété svn:ignore , 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 à dans le référentiel).

Pour vous simplifier la vie, j’ai créé un fichier reg nommé Settings.Svn.reg et l’ai ajouté à la racine du référentiel. Maintenant, tout le monde peut double-cliquer sur ce fichier une fois, et fait les réglages.

 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 repository SVN, donc si quelqu’un le sait, voudriez-vous le partager?

 cd parent_dir #le répertoire contenant le dossier à ignorer récursivement
 svn propedit svn: ignore.  # va ouvrir svn-prop.tmp
 dossier (s) d'inscription
 ^ X
 Y
 commit -m 'ignore la direcoty ciblée'