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.