Почему эти файлы не игнорируются 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"