.gitignore игнорирует все файлы, а затем рекурсивно разрешает *.foo
Уже есть несколько подобных вопросов, но ни один из ответов не работает для меня.
Я хочу игнорировать все в папках под моим хранилищем, кроме файлов с *.foo
(Если кому-то интересно, как это можно оправдать - я на самом деле делаю git-репозиторий для всех своих проектов "Logic" - музыкального программного обеспечения на Mac - но я хочу хранить только реальные файлы проекта *.logic)
Я собираюсь изложить это, так что мы все на одной тарелке. Вот что я делаю, начиная с нуля:
Настроить:
mkdir temp
cd temp
mkdir testdir
cd testdir
touch include.foo
touch dontinclude.bad
cd..
git init
touch .gitignore
Вставьте это в.gitignore
# Ignore all
/*
# But not these files...
!.gitignore
!*.foo
мерзавец статус
И единственный неотслеживаемый файл - это.gitignore
если бы я набрал 'git add.' - без изменений, только.gitignore видно, и мои 2 файла игнорируются.
Почему это не работает и как вы можете изменить описанную выше процедуру, чтобы она работала?
Вот очень похожий вопрос, откуда я получил файл.gitignore. Я использую git --version 1.7.7 (также пробовал 1.7.3) - .gitignore, чтобы игнорировать все файлы, а затем рекурсивно разрешает файлы определенного типа
1 ответ
Ваша проблема в том, что /*
шаблон в начале соответствует всем файлам и каталогам на верхнем уровне - в том числе testdir
так что все внутри testdir
игнорируется
Это то, что вы хотите:
# Ignore everything
*
# Don't ignore directories, so we can recurse into them
!*/
# Don't ignore .gitignore and *.foo files
!.gitignore
!*.foo
Когда вы делаете git add .
с этим конфигом вы должны найти только .gitignore
а также *.foo
файлы, перечисленные как изменения, которые будут приняты.