.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 файлы, перечисленные как изменения, которые будут приняты.

Другие вопросы по тегам