.gitignore игнорировать все файлы, а затем рекурсивно разрешить *.foo
У нас уже несколько вопросов, похожих на это, но ни один из ответов не работает для меня.
Я хочу игнорировать все в папках ниже моего репозитория, кроме файлов с *.foo
(Если кому-то интересно, как это можно оправдать - я фактически создаю репозиторий git для всех моих проектов "Логика" - музыкальное программное обеспечение на Mac, но я хочу только сохранить фактические файлы проекта *. логика)
Я собираюсь описать это, так что мы все на одной тарелке.
Вот что я делаю, начиная с нуля:
Настройка:
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
git статус
И единственный неископанный файл - .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
, которые перечислены как изменения, которые необходимо выполнить.