web-dev-qa-db-fra.com

Ignorer certains fichiers dans les sous-répertoires, mais pas tous

J'ai une structure similaire à la suivante:

/root/
/root/data/
/root/data/script.php
/root/data/some.json
/root/data/feature/one.json
/root/data/feature/two.json
/root/data/other-feature/one.json
/root/data/other-feature/important-script.php

J'aimerais que git ignore tout .json fichiers sous le chemin '/ data/...', mais '/ data /' contient parfois des sous-répertoires.

Ma compréhension est qu'un simple data/*.json dans gitignore ne correspondra qu'à un seul répertoire, car * ne correspond pas à /, comme indiqué sur http://git-scm.com/docs/gitignore , "Format du modèle", puce n ° 6:

Sinon, git traite le modèle comme un glob Shell utilisable par fnmatch (3) avec l'indicateur FNM_PATHNAME: les caractères génériques dans le modèle ne correspondront pas à un/dans le chemin. Par exemple, "Documentation/*. Html" correspond à "Documentation/git.html" mais pas à "Documentation/ppc/ppc.html" ou "tools/perf/Documentation/perf.html".

Existe-t-il un moyen simple de le faire, ou dois-je ajouter activement des fichiers gitignore dans chaque sous-répertoire, explicitement?

63
anonymous coward

J'ai récemment écrit un article sur ce problème. Voir ici .

Fondamentalement, ce dont vous avez besoin est d'en mettre un .gitignore avec *.json dans le /data/ répertoire.

[~ # ~] upd [~ # ~] : depuis git 1.8.4 ( 1.8.2 si vous utilisez msysgit), il est possible d'utiliser des motifs à double étoile, comme /data/**/*.json

83
Ivan Danilov

vous pouvez placer data/**/*.json dans votre .gitignore dans /root répertoire pour éviter plusieurs .gitignore fichiers dans différents répertoires

**/ - correspond à tout nombre de sous-répertoires (y compris le courant)

exemple: data/**/*.json l'enregistrement ignorera data/1.json, data/subfolder/2.json, data/../../3.json

21
E.Monogarov

Ce modèle fonctionne pour moi pour le sous-dossier de données en ignorant uniquement les fichiers png et jpg:

**/data/**/*.png
**/data/**/*.jpg
2
Aqib Mumtaz