Git-игнорировать определенные файлы в подкаталогах, но не все - PullRequest
62 голосов
/ 22 июля 2011

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

/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 в каждый подкаталог, явно?

Ответы [ 3 ]

82 голосов
/ 22 июля 2011

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

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

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

21 голосов
/ 10 февраля 2015

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

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

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

1 голос
/ 07 мая 2018

Этот шаблон работает для меня для подпапки данных, игнорируя только файлы png и jpg:

**/data/**/*.png
**/data/**/*.jpg
...