2010-09-15 4 views
43

Я хочу игнорировать все правила .gitignore в подкаталоге, кроме правил .gitignore в корне.Можно ли игнорировать правила .gitignore в подкаталоге?

например) У меня уже есть .gitignore файл в структуре каталогов /a.

А также имеют .gitignore файл в /a/b. Предположите, у /a есть a.txtb.txt.

/a/b имеет .config файл. .gitignore определяет .config в /a/b.

.config файл будет проигнорирован .gitignore в /a/b.

Но я действительно хочу отследить файл .config, игнорируя правила .gitignore в подкаталоге.

Возможно ли это?

Заранее спасибо

ответ

74

Ваш вопрос не слишком ясно, но если есть некоторые подкаталоги, где вы хотите различные правила gitignore, вы можете просто создать новый .gitignore в этом каталоге.

Скажем, у вас есть:

 
project/.gitignore 
project/stuff/.gitignore 

.gitignore в хлам/перекроет .gitignore в корневом каталоге.

git help gitignore или man gitignore содержит немного больше информации о том, что возможно.

+2

Я думаю, что OP спрашивает, есть ли у вас структура каталогов '/ a/b/c' и вы обновляете' .gitignore' в '/ a/b', возможно ли это в'/a/b/c' игнорировать правила в '/ a/b' и вместо этого использовать только правила из'/a'. –

+33

Да, если это был вопрос, можно отменить правила в .gitignore дальше по цепочке. '" Необязательный префикс!, Который отрицает шаблон, любой соответствующий файл, исключенный предыдущим шаблоном, снова будет включен. "' – signine

+2

@signine Не работает с каталогами. См. [Мой ответ] (http://stackoverflow.com/a/36108231/624787). –

26

Допустим, что вы хотите включить node_modules в свой репозиторий, но некоторые модули по этой линии имеют .gitignore. Вы можете свести на нет правила, добавив следующую строку в файл корневой .gitignore:

# Make sure to include everything in node_modules. 
!node_modules/** 
+1

Есть ли более общий способ сделать это? скажем, у меня есть 'node_modules/mod1',' node_modules/mod2' внутри обоих - это .gitignore, который игнорирует более глубокие 'node_modules' внутри них (как в' node_modules/mod1/node_modules'. Я часто добавляю и удаляю модули Я не могу точно знать и вручную добавлять правила, чтобы игнорировать 'node_modules/mod1/.gitignore' или вручную добавлять'! Node_modules/mod1/node_modules' все время. В основном я пытаюсь развернуть приложение метеоритов и все встроенные '.gitignores' делают невозможным получить все это в git. – gman

4

Насколько я знаю, что нет никакого способа сделать это. Поскольку локальный .gitignore перезапишет корневой ginignore Мое обходное решение добавляется вручную.

git add --force [ your file and folder] 
+0

child' .gitignore' не работал для меня, поскольку родитель переопределяет все настройки дочерних папок. Если вы принудительно добавите с помощью 'git add -f myfile.txt', он начнет отслеживать изменения в обход родительских настроек '.gitignore'. – SliverNinja

5

Ключом к проблеме здесь является то, что родительский каталог исключен. От $ man gitignore:

Невозможно повторно включить файл, если родительский каталог этого файла исключен. Git не перечисляет исключенные каталоги по соображениям производительности, поэтому любые шаблоны в содержащихся файлах не имеют никакого эффекта, независимо от того, где они определены.

Вот как я получил его на работу.Дано:

/a/... 
/b/foo 
/c/... 

/.gitignore:

/* 
!/b 

Тогда /b/foo будет отображаться как включаемые файлы в то время как все в /a и /c будут исключены. Компромисс заключается в том, что вам нужно добавить отрицание для всех родителей любого каталога, в который вы хотите включить файлы.

+0

Почему бы не использовать'!/b/**/* '? –

+0

Не могу ответить без лишних объяснений от вас. –

Смежные вопросы