.gitignore - игнорировать все в каталоге, кроме одного файла

Я знаю, что таких вопросов много, но никто не решил мою проблему. Я хочу что-то очень простое - игнорировать все файлы и папки в определенной папке, кроме одного файла. Вот что я пытаюсь:

#Ignore
public/typings/*

#Allow
!public/typings/browser/ambient/jquery/jquery.d.ts

... но файл по-прежнему игнорируется.

Любые предложения?

Ответ 1

Если файл был добавлен в предыдущем коммите, прежде чем вы поместите его в git ignore, возможно, ваш .gitignore не работает. У меня была такая же проблема несколько дней назад. Я решил проблему благодаря этому сообщению:

Опубликовать int randallkent

Надеюсь, это поможет вам.

EDIT:

Решение

найдено здесь: исключение каталога gitignore не работает

Ответ 2

Кажется, что ! работает только в том случае, если файл находится в одной папке. Возможным обходным путем было бы вложить ту же самую формулировку, пока не дойдете до финального файла. Немного беспорядочно, но он работает.

public/typings/*
!public/typings/browser
public/typings/browser/*
!public/typings/browser/ambient
public/typings/browser/ambient/*
!public/typings/browser/ambient/jquery
public/typings/browser/ambient/jquery/*
!public/typings/browser/ambient/jquery/jquery.d.ts

Ответ 3

Я много боролся с этой темой, позвольте мне поделиться процедурой, которая работала для меня:

1) Добавьте папку верхнего уровня "abc/" в ваш .gitignore 2) Допустим, в "abc/" у вас есть также папки "def/" и "jkl/". Если вы хотите сохранить содержимое "jkl/", вы можете просто сделать:

git add -f jkl/*.php

Хорошо! Теперь все внутри "jkl/" с расширением .php будет отслеживаться git, даже при следующих коммитах, без головной боли!

Я нашел, что это правильное решение для моего случая, потому что я действительно сходил с ума, пытаясь понять, как gitignore сканирует файлы и каталоги.