2009-07-16 8 views
27

Avec la propriété svn: ignore, est-il possible de spécifier ce que je veux ignorer en fonction de modèles que je ne veux pas ignorer? En d'autres termes, je veux ignorer tout mais fichiers se terminant par .xyz. Comment ferais-je cela (si c'est possible)? Une option que j'ai explorée est de valider tout ce que je veux être versionné, puis de mettre la propriété svn: ignore sur le répertoire '*', ce qui signifie qu'aucun autre fichier, mais ce que j'ai déjà commit sera versionné . C'est le meilleur que je puisse trouver, mais il me semble que si je devais ajouter un autre fichier à la version, je devrais faire plusieurs validations ... une pour supprimer la propriété svn: ignore, une autre ajouter/valider le (s) nouveau (x) fichier (s), puis un troisième pour remplacer svn: ignore par '*'.Utiliser svn: ignore pour ignorer tout sauf certains fichiers

Vos pensées?

Répondre

10

Non, il n'y a pas de correspondance exclusive comme décrit. This article répertorie les possibilités de correspondance de modèle. Il est limité à:

  • ? - un caractère unique
  • * - représente une chaîne de caractères, y compris la chaîne vide
  • [ - Commence une définition de classe de caractères terminée par ], utilisé pour faire correspondre un sous-ensemble de caractères

Une question similaire a déjà été posée here.

+1

Il y a un peu plus de 'fnmatch' que mentionné dans cette réponse. Voir la réponse de tomka ci-dessous http://docs.python.org/2/library/fnmatch.html – vinnyjames

0

Eh bien, je ne sais pas si je manque quelque chose, mais vous pouvez utiliser un motif que vous voulez:

svn propset svn:ignore "*~" . 

Vous pouvez vérifier avec:

svn propget svn:ignore . 

Une autre façon est d'utiliser un alias/script qui peut effectuer une analyse complexe lors de la validation.

La meilleure solution que je trouve à utiliser moi-même est de séparer complètement l'arbre versionné des fichiers sources de l'arbre de construction. De cette façon, vous ne générez pas de choses dans votre arborescence versionnée d'un répertoire. Ensuite, vous pouvez seulement utiliser svn:ignore pour ignorer les artefacts simples générés par les éditeurs de texte par exemple.

EDIT:

Désolé mon erreur pour la première solution, j'ai mal lu votre message. Les deux autres façons semblent pertinentes même si ce n'est pas exactement ce que vous voulez ...

+0

Je pense que votre première solution est sur quelque chose, cependant. Pourriez-vous concevoir svn: ignore à une expression régulière qui correspond à tout sauf les fichiers qui se terminent par ".xyz"? – jprete

+0

@jprete aucun regex n'est autorisé malheureusement. la correspondance de modèle est basée sur fnmatch. – whaley

7

C'est la seule solution que je connaisse. Vous pouvez explicitement ajouter des fichiers même s'ils sont ignorés.

Vous devrez cependant ajouter ce paramètre dans tous les sous-répertoires.

# Create a repository with property ignore * 

[[email protected] ~] cd /tmp 
[[email protected] /tmp] svnadmin create foo 
[[email protected] /tmp] svn co file:///tmp/foo co 
Checked out revision 0. 
[[email protected] /tmp] cd co 
[[email protected] co] svn propset svn:ignore \* . 
property 'svn:ignore' set on '.' 

# Create 3 files 

[[email protected] co] touch a 
[[email protected] co] touch b 
[[email protected] co] touch c 

# We can add all 3 of these files in one transaction 

[[email protected] co] svn status 
M  . 
[[email protected] co] svn add a 
A   a 
[[email protected] co] svn add b 
A   b 
[[email protected] co] svn status 
M  . 
A  a 
A  b 
[[email protected] co] svn add c 
A   c 
[[email protected] co] svn ci 
Sending  . 
Adding   a 
Adding   b 
Adding   c 
Transmitting file data ... 
Committed revision 1. 
+1

Merci pour le conseil. Je ne me suis pas rendu compte que vous pouviez ajouter explicitement des fichiers car apparemment svn add ignore svn: ignore. – whaley

+0

Pour les utilisateurs de TortoiseSVN (1.8), cela vous met en colère si vous essayez d'ajouter un fichier ignoré via son interface graphique, mais vous pouvez le faire via la ligne de commande. – AlexMA

17

Jetez un oeil à http://www.thoughtspark.org/node/38. De toute évidence, vous pouvez utiliser "!" dans les groupes de caractères pour nier sa signification. Donc, si vous voulez ignorer tout sauf les fichiers se terminant par.java, définissez le modèle suivant à svn: ignore:

*[!j][!a][!v][!a] 
*.java?* 
+4

En fait, j'ai demandé à jcscoobyrs (qui gère le paquet svn sur OSX) à ce sujet sur IRC ce jour-là qui a abouti à son post à thoughtspark.org . Je le mentionne dans un commentaire à la réponse acceptée. Juste pour montrer que peu importe comment stackoverflow.com est génial, il ne peut toujours pas battre parler à un projet de committer sur IRC. – whaley

+0

La correcte serait: * [! J] [! A] [! V] [! A] * j [! A] [! V] [! A] * ja [! V] [! A ] * jav [! A] – Nux

+0

Le lien est rompu. – James

5

Voici ce que j'ai mis sur le dossier bin pour svn:ignore propriété à tout correspondre à l'exception des fichiers APK:

*[!a][!p][!k] 
*a[!p][!k] 
*ap[!k] 

S'il y aurait plein RegExp support que vous pourriez utiliser lookbehind négatif, mais cela est rarement mis en œuvre de toute façon (par exemple, pas en JavaScript) et est inefficace.

4

Ce qui suit fonctionne pour moi et se débarrasse de quelques bizarreries des autres suggestions.

*.? 
*.?? 
*.??? 
*.[!j]??? 
*.?[!a]?? 
*.??[!v]? 
*.???[!a] 
*.?????* 

Une ligne par ligne d'explication suivante:

  • ignorer tout ce qui a une extension d'une lettre
  • ignorer tout ce qui a une extension de deux lettres
  • ignorer tout ce qui a trois -lettez la lettre
  • ignorez tout ce qui a une extension de quatre lettres où la première lettre de l'extension n'est pas j
  • ignorer tout ce qui a une extension de quatre lettres où la seconde lettre de l'extension est un
  • ne pas tenir compte de tout ce qui a une extension de quatre lettres où la troisième lettre de l'extension n'est pas v
  • ignorer tout ce qui a une extension de quatre lettres où la quatrième lettre n'est pas un
  • ignorer tout de l'extension qui a une extension de cinq lettres ou plus

Limitations:

  • Ce w ill aussi bloquer les répertoires qui se terminent sur .java
  • Malheureusement, je ne pouvais pas ignorer les fichiers sans extension, car cela bloquerait aussi les répertoires.
Questions connexes