Почему эти файлы не игнорируются git?

Мой файл .gitignore содержит следующие строки:

 xcuserdata/**/*
 !xcuserdata/**/xcschemes/*

Но все еще отслеживается следующий файл /MyApp/MyApp.xcodeproj/xcuserdata/colas.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist

Почему так? Как я могу это исправить?

PS: Если у меня был MyApp.xcodeproj/xcuserdata/colas.xcuserdatad/xcdebugger, файлы игнорируются. Но я не понимаю, почему он не игнорирует их без этого "взлома".


РЕДАКТИРОВАТЬ 1

В отличие от того, что сказано в одном из ответов, шаблон

 xcuserdata/**/*
 !xcuserdata/**/xcschemes/*

работает!!! Я имею в виду, что файлы под /xcschemes отслеживаются.

См. также сообщение Git игнорировать файл для проектов Xcode, где я получаю этот файл .gitignore.

EDIT 2

Моя версия Git 1.8.3.4 (Apple Git-47).

РЕДАКТИРОВАТЬ 3

Когда я git check-ignore этот файл, вот что я получаю

  fatal: Not a git repository (or any of the parent directories): .git

Но факт заключается в том, что родительский каталог представляет собой каталог git...

EDIT 4

Когда я git check-ignore --no-index -- этот файл, вот что я получаю

[MT] PluginLoading: Required plug-in compatibility UUID 37B30044-3B14-46BA-ABAA-F01000C27B63 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/XcodeSnippetsHelper.xcplugin' not present in DVTPlugInCompatibilityUUIDs
2014-02-10 10:03:50.856 xcodebuild[1496:d07] XcodeColors: load (v10.1)
2014-02-10 10:03:50.859 xcodebuild[1496:d07] XcodeColors: pluginDidLoad:
fatal: Not a git repository (or any of the parent directories): .git

EDIT 4bis

Из корневой папки:

  • если я не использую параметр no-index, ответа на git check-ignore нет.

  • если я использую параметр no-index: я получаю ошибку error: unknown option 'no-index'...

Странный; -!

Ответ 1

Сначала вы можете сделать git check-ignore (git 1.8.3.3+), чтобы увидеть какое правило игнорирует ваш файл (при условии, что он не находится в индексе в первую очередь)

Во-вторых, прочитайте ".gitignore исключить папку, но включите определенную подпапку":

Невозможно повторно включить файл, если исключен родительский каталог этого файла. (*)
(*: если определенные условия не выполняются в git 2.8+, см. ниже)
git не содержит списков исключенных каталогов по соображениям производительности, поэтому любые шаблоны с содержащимися файлами не имеют никакого эффекта, независимо от того, где они определены.

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

xcuserdata/**
!xcuserdata/**/
!xcuserdata/**/xcschemes/**

Помните:

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


Обратите внимание, что с git 2.9.x/2.10 (середина 2016?) возможно повторное включение файла, если родительский каталог этого файла исключен если в пути нет добавленного шаблона.

Nguyễn Thái Ngọc Duy (pclouds) пытается добавить эту функцию:

Однако:

Часть каталога в правилах повторного включения должна быть буквальной (т.е. без подстановочных знаков)

Таким образом, это все равно не сработало бы.

Ответ 2

Добавление имен файлов в .gitignore помогает предотвратить непреднамеренное добавление файлов. Если вы сделаете что-то вроде git add ., чтобы добавить в репозиторий папку с файлами, файлы (или типы файлов), проигнорированные в .gitignore, не будут добавлены. Они должны быть добавлены с помощью флага -f с помощью команды git add. Это ничего не изменит, если файлы уже отслеживаются.

Вы можете остановить отслеживание файлов, используя ответ на вопрос: Удалить файл из репозитория Git, не удаляя его из локальной файловой системы

edit: перечитав вопрос еще несколько раз, я думаю, что у вас может быть примерно такая же проблема, что и в этом ответе: .gitignore - игнорировать любой каталог "bin"