Можно ли игнорировать правила .gitignore в подкаталоге?
Я хочу игнорировать все правила .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
в подкаталоге.
Возможно ли это?
Заранее спасибо
Ответы
Ответ 1
Ваш вопрос не слишком ясен, но если есть какие-то подкаталоги, где вам нужны разные правила gitignore, вы можете просто создать новый .gitignore в этом каталоге.
Скажите, что у вас есть:
project/.gitignore
project/stuff/.gitignore
.gitignore в файле/будет переопределять .gitignore в корневом каталоге.
git help gitignore
или man gitignore
содержит немного больше информации о том, что возможно.
Ответ 2
Предположим, вы хотите включить node_modules
в свой репозиторий, но какой-то модуль по строке имеет .gitignore
. Вы можете отменить правила, добавив в свой корневой файл .gitignore
следующее:
# Make sure to include everything in node_modules.
!node_modules/**
Ответ 3
Ключом к проблеме здесь является то, что родительский каталог исключен. От $ man gitignore
:
Невозможно повторно включить файл, если родительский каталог этого файла исключен. Git не содержит список исключенных каталогов по соображениям производительности, поэтому любые шаблоны с содержащимися файлами не имеют никакого эффекта, независимо от того, где они определены.
Вот как я начал работать. Дано:
/a/...
/b/foo
/c/...
/.gitignore
:
/*
!/b
Затем /b/foo
будет отображаться как включенные файлы, в то время как все в /a
и /c
будет исключено. Компромисс заключается в том, что вам нужно добавить отрицание для всех родителей любого каталога, в который вы хотите включить файлы.
Ответ 4
Насколько я знаю, нет способа сделать это. Поскольку локальный .gitignore будет перезаписывать корневой ginignore
Мое обходное решение добавляется вручную.
git add --force [ your file and folder]