Git-ігнорує певні файли в підкаталогах, але не всі


75

У мене є структура, схожа на таку:

/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
Найсвіжіша відповідь тут: stackoverflow.com/a/10714272/176877
Кріс Москіні

Відповіді:


94

Нещодавно я писав пост про таку проблему. Дивіться тут .

В основному те, що вам потрібно, це помістити один .gitignoreіз них *.jsonу /data/каталог.

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


Я додав .gitignoreфайл, що містить *.json, але якщо я змінив один із цих файлів і запустив git status, я бачу їх у списку як "Зміни не виконані". Чи .gitignoreпотрібно файли фіксувати до набрання чинності? Це відображається тому, що файли раніше відстежувались?
анонімний боягуз

14
Раніше відстежувані файли будуть відстежуватися незалежно від того, що в них знаходиться.gitignore
Іван Данилов

23

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

**/ - відповідає будь-якій кількості підкаталогів (включаючи поточний)

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


@CaptainBlammo Я його використовую, це працює, може, ти щось зробив неправильно? є інформація: деякі документи
Є.Моногоров

1
і це також буде ігнорувати /bla/data/**/*.jsonі /bla/bla/data/**/*.json. /data/**/*.jsonслід використовувати.
Онур Демір,

3

Цей шаблон працює для мене для підпапки даних, ігноруючи лише файли png та jpg:

**/data/**/*.png
**/data/**/*.jpg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.