Git -ignore определенные файлы в подкаталогах, но не все

У меня есть структура, похожая на следующую:

/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

Я хотел бы, чтобы git игнорировал любые файлы .json по пути '/data/...', но '/data/' иногда содержит подкаталоги.

Я понимаю, что простой data/*.json в gitignore будет соответствовать только одному каталогу, поскольку * не соответствует /, как указано в http://git-scm.com/docs/gitignore, "Формат шаблона", № 6:

В противном случае git рассматривает шаблон как оболочку оболочки, подходящую для использования fnmatch (3) с флагом FNM_PATHNAME: подстановочные знаки в шаблоне не совпадают с/в пути. Например, "Documentation/*. Html" соответствует "Documentation/git.html", но не "Documentation/ppc/ppc.html" или "tools/perf/Documentation/perf.html".

Есть ли простой способ сделать это, или мне нужно активно добавлять файлы gitignore в каждый подкаталог, явно?

Ответ 1

Недавно я написал сообщение о такой проблеме. См. здесь.

В основном вам нужно положить один .gitignore с *.json в каталог /data/.

UPD: Поскольку git 1.8.4 (1.8.2, если вы используете msysgit), можно использовать шаблоны с двумя звездами, например /data/**/*.json

Ответ 2

вы можете поместить data/**/*.json в каталог .gitignore в /root, чтобы предотвратить несколько файлов .gitignore в разных каталогах

**/ - соответствует любому количеству подкаталогов (включая текущий)

Пример

: data/**/*.json запись будет игнорировать data/1.json, data/subfolder/2.json, data/../../3.json