Не могу понять, как gitignore игнорирует папки

Я хочу создать репозиторий для моего проекта Magento. В корневом каталоге есть много папок и файлов, и я время от времени меняю только одну папку: app/code/local/

Все остальное, что я хочу игнорировать. Но.. не может. Мой .gitignore файл:

*
!app/code/local/
!app/code/local/*

Затем, когда я пытаюсь добавить папку в репо, я получаю сообщение об ошибке:

git add app/code/local/Mds/

The following paths are ignored by one of your .gitignore files:
app
Use -f if you really want to add them.
fatal: no files added

Кто-нибудь может помочь с этим?

Ответ 1

Попробуйте ниже игнорировать, как вам нужно:

/*
!/app/
/app/*
!/app/code/
/app/code/*
!/app/code/local/

Следующее обсуждение было полезным: http://git.661346.n2.nabble.com/negated-list-in-gitignore-no-fun-td1675067.html, особенно следующее из Линуса:

That by design. You've chosen to ignore those directories; they match "*" themselves. Thus, 'git add .' doesn't descend into them looking for files.

Итак, в основном, для каждого уровня, в который вы должны войти, не записывайте эту папку и игнорируйте содержимое внутри этой папки.

Ответ 2

Является ли это .gitignore в корне репо?

Попробуйте следующее:

/*
!/app/code/local

Ответ 3

Согласно документации:

"Невозможно повторно включить файл, если родительский каталог этого файла исключен."

Например, если вы уже работали с репозиторией и сказали Git игнорировать родительский каталог, сделали некоторые коммиты, а затем вернулись и попытались разрешить некоторый подкаталог исключенного каталога, он не будет включить этот подкаталог , даже если ваш .gitignore файл верен. Чтобы обойти это, вам нужно принудительно добавить его (с флагом -f):

git add -f {file}

Как только это будет сделано, последующие изменения будут отслеживаться.