Можно ли игнорировать правила .gitignore в подкаталоге? - PullRequest
63 голосов
/ 15 сентября 2010

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

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

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

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

Файл

.config будет игнорироваться .gitignore в /a/b.

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

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

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

Ответы [ 4 ]

109 голосов
/ 16 сентября 2010

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

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

project/.gitignore
project/stuff/.gitignore

.gitignore в stuff / переопределяет .gitignore в корневом каталоге.

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

29 голосов
/ 25 июля 2014

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

# Make sure to include everything in node_modules.
!node_modules/**
7 голосов
/ 20 марта 2016

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

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

Вот как я заставил его работать.Дано:

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

/.gitignore:

/*
!/b

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

6 голосов
/ 05 августа 2015

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

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