.gitignore игнорирует все файлы, затем рекурсивно разрешает * .foo - PullRequest
53 голосов
/ 06 ноября 2011

Уже есть несколько подобных вопросов, но у меня нет ни одного из ответов.

Я хочу игнорировать все в папках под моим хранилищем, кроме файлов с * .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

git status

И единственный неотслеживаемый файл - это .gitignore

если я набрал 'git add.' - без изменений, виден только .gitignore, а мои 2 файла игнорируются.

Почему это не работает и как вы можете изменить описанную выше процедуру, чтобы она работала?

Вот чрезвычайно схожий вопрос, откуда я получил файл .gitignore. Я использую git --version 1.7.7 (также пробовал 1.7.3) - .gitignore, чтобы игнорировать все файлы, а затем рекурсивно разрешает файлы определенного типа

1 Ответ

109 голосов
/ 06 ноября 2011

Ваша проблема в том, что шаблон /* в начале соответствует всем файлам и каталогам на верхнем уровне - включая 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 файлы, перечисленные в качестве изменений для фиксации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...