исключение каталога gitignore не работает

у меня есть следующая структура папок:

public
    media
        catalog
            product
            category
        private
        tmp
        var
        test

Я хочу gitignore все в media каталог кроме catalog/category и private

мой gitignore я пытаюсь:

public/media/*
!public/media/catalog/category/
!public/media/private

но это не работает. Любые новые файлы, добавленные в category или private каталоги недоступны для добавления.

я мог бы просто git добавить силу, но я хотел бы, чтобы это было сделано через gitignore, если это возможно

2 ответов


обычно проще всего поставить просто .gitignore на уровне где начинается материя. (Это также помогает, если вы когда-либо разделяли репозиторий или перемещали каталоги.) В этом случае вам нужно игнорировать все, кроме catalog и private на так public/media/.gitignore поставить:

/*
!/catalog/
!/private/

и public/media/catalog/.gitignore поставить:

/*
!/category/

важно (и причина, по которой ваши правила не работают) не игнорировать public/media/catalog сам каталог, как и в противном случае все в нем будет проигнорировано, даже если вы не хотите игнорировать определенную часть его содержимого.

конечно, вы можете объединить это в один игнор в public/media уровне, если вам нравится:

/*
!/catalog/
!/private/
/catalog/*
!/catalog/category/

решение с одним .gitignore на корневом уровне

вы пытались использовать один .gitignore файл на корневом уровне репозитория. Как и вы, я обычно также централизую все игнорирования, чтобы держать вещи в порядке. В этом случае это сложно, потому что" невозможно повторно включить файл, если родительский каталог этого файла исключен" [источник].

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

С, что, ваш .gitignore структура:

public/media/**
!public/media/private
!public/media/catalog/

public/media/catalog/**
!public/media/catalog/category/