.gitignore виключає файли в каталозі, але не певні каталоги


98
application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*

Це, здається, не працює. Коли я клоную проект, немає "application/cache"папки чи "application/cache/folder"папки тощо.

Я хотів би, якби файли в папках кешу не були кешовані, а папки були, так що дозволи на папки переносяться та існують.

Відповіді:


220

Git не відстежує папки, а лише файли, тому якщо ви проігноруєте все в папці, Git не зможе нічого відстежувати. Ви можете додати .gitignoreфайл в кожному каталозі ( application/cache, application/cache/folder, application/cache/folder/onemorefolder/) з наступним змістом:

*
!.gitignore

Потім ви можете додати ці каталоги, і .gitignoreбуде доданий лише файл у кожному каталозі - але це означає, що каталоги тепер будуть відслідковуватися (тобто створюватися під час клонування).


7
Файли .gitignore, використані для цієї мети, можуть бути порожніми.
кевпі

2
Вони можуть бути порожніми, якщо папки ігноруються у верхньому .gitignoreфайлі. У цьому випадку точна моя відповідь.
KingCrunch

4
Більш розумним і простішим є використання файлу з іменем .gitkeep, тоді вам не потрібно нічого розміщувати у файлі .gitignore.
Їжак

3
@kevpie У папці є інші файли, і він не хоче відстежувати їх. Якщо файл .gitignore порожній, ці файли, мабуть, відслідковуються.
малаяс

з тією ж метою я використовую .gitkeepзамість .gitignore. для мене це має більше сенсу
Éderson T. Szlachta

22

Git не відстежує порожні каталоги. Просто додайте кілька порожніх файлів-заповнювачів у папки, які ви хочете зробити.

touch application/cache/.keep
git add -f application/cache/.keep

Зробіть це також з кожною "порожньою" папкою. Пізніше ви можете ігнорувати ці файли, вони дійсно існують лише для того, щоб переконатися, що git створює ці каталоги на клоні. Записи в .gitignoreінших файлах у папках не відслідковуються (якщо ви не змушуєте їх git add -f;)).


16

Є ще один, можливо, більш чистий спосіб зробити це. Замість того, щоб у папках, які ви хочете зберегти, мати суб .gitignore файли. Ви можете помістити це в корінь .gitignore наступним чином:

application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*
!*.gitkeep

Тепер просто створіть і введіть порожні файли .gitkeep у каталоги, як зазначено вище. Потім у папці буде відстежено ті файли .gitkeep, але жоден вміст не буде відстежено.


2
або просто !*.gitkeep:)
Éderson T. Szlachta

Питання полягало в тому, як ігнорувати вміст папок, але зберігати самі папки. Тому я вважаю, що моя відповідь стоїть і просто мати! *. Gitkeep не буде ігнорувати вміст папок.
Джоел Дакворт

3

ви можете помістити файл .gitignore у кожен з них (як сказав mipadi) або зробити щось подібне у вашому кореневому файлі .gitingnore

/assets/*/
/assets/*.*

це чудово працює для мене


Це працює, але лише у тому випадку, якщо репо використовує розширення файлів. Щось подібне root/LICENSE-FILEне виключено.
Бретт Замір

2

Visual Studio не сподобалась прийнятої відповіді. Мені довелося додати новий рядок перед *, щоб він працював.

# Ignore all files in this folder.
*
!.gitignore
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.