2010-11-19 11 views
4

En cherchant, j'ai trouvé comment avoir Mercurial ignorer certains répertoires (et les fichiers/répertoires qu'ils contiennent) qui sont dans la racine du répertoire de référentiel, mais je ne peux pas travailler comment étendre cela à répertoires qui sont à plusieurs niveaux dans.Avoir Mercurial ignorer tout sauf certains sous-répertoires

Dans ce cas, je souhaite que le contrôle de version les répertoires suivants:

app/design/frontend/rc 
skin/frontend/rc 

En conséquence, mon fichier .hgignore ressemble à ceci.

syntax=regexp 
^(?!(app(/|$))|(skin(/|$))) 
^app/code 
^app/design/adminhtml 
^app/design/frontend/base 
^app/design/frontend/default 
^app/design/install 
^app/etc 
^app/locale 
^app/Mage.php 
^app/.htaccess 
^skin/adminhtml 
^skin/frontend/base 
^skin/frontend/default 
^skin/install 

Je suis sûr qu'il ya une bien meilleure façon de le faire qui n'implique pas choisir les autres répertoires dans les applications et la peau, et que je aurez probablement envie de le faire pour quelques projets que je pensais Je demanderais ici. Merci.

+0

ongles a la bonne réponse. Ne pas muck w/assertions négatives dans la syntaxe regex, juste ignorer ". *", Puis manuellement "hg ajouter" les fichiers que vous voulez suivre. Ajoutez override '.hgignore', donc une fois que vous les ajoutez, c'est comme si vous créiez une exception illisible dans regexp. –

+0

Plus tôt, quand je me débattais avec les assertions négatives, j'avais l'impression d'être si proche, mais cela ne fonctionnait pas avec les répertoires imbriqués. Si je peux trouver comment le faire me sauverait manuellement en ajoutant les répertoires/fichiers désirés chaque fois que de nouveaux fichiers ont été ajoutés. –

+0

en mettant à jour ma réponse, j'ai remarqué une faute de frappe dans votre .hgignore. Ce devrait être «syntaxe: regexp», pas «syntaxe = regexp». –

Répondre

3

Ajoutez manuellement les répertoires que vous voulez dans votre référentiel, puis ignorez tout le reste.

hg init 
hg add app/design/frontend/rc 
hg add skin/frontend/rc 

Puis dans votre .hgignore:

syntax: glob 

** 
+0

Merci pour la réponse. Si je comprends bien, cela voudrait dire que je dois ajouter manuellement ces répertoires/fichiers chaque fois que de nouveaux fichiers ont été ajoutés, c'est pourquoi j'espère toujours pouvoir faire fonctionner l'assertion négative. –

+0

@David Oliver il ne veut pas dire les ajouter au fichier ignoré, il signifie les ajouter au dépôt dans un commit. Mercurial ne démarre pas automatiquement le suivi de tous les fichiers dans un répertoire. Il sait qu'il est là mais ne sait pas quoi faire avec. – msarchet

+1

@msarchet: Merci, mais je m'en rends compte. J'essaie d'éviter de devoir explicitement dire à Mercurial d'ajouter de nouveaux fichiers dans les répertoires que je veux contrôler. –