Gitignore все, кроме одной папки и всего ее содержимого - независимо от уровня вложенности
Я знаю, что этот вопрос задавался много раз, но, честно говоря, несмотря на многие принятые ответы, я не нашел изящного решения этой проблемы. Я подчеркиваю работу аккуратно здесь.
Я хочу игнорировать все, кроме одной папки и всего ее содержимого.
Это не достигнет этого:
*
!dest
!dest/*
что бы сохранить dest
папка и все файлы, которые находятся в dest
, но не другие папки внутри, а также файлы в этих подпапках.
Кто-нибудь написал в комментариях! на один из подобных вопросов, которые вы не можете достичь без указания полного пути к тому, что вы не хотите игнорировать, если вы начинаете .gitignore
с *
,
Теперь я убежден, что он был прав. Или есть аккуратный способ игнорировать все, кроме одной папки и всего ее содержимого
1 ответ
Я только что проверил (с недавним Git, даже на Windows)
*
!dest/
!dest/**
Как обычно, вы просто должны следовать правилу:
Невозможно повторно включить файл, если родительский каталог этого файла исключен. (
*
)
(*
: если в git 2.?+ не выполнены определенные условия, см. ниже)
Однажды dest
папка в белом списке (!dest/
), вы можете легко исключить его содержание (на нескольких уровнях) (!dest/**
).
Оттуда любой git check-ignore -v dest/x/y/z/aFile
не вернул бы ничего, что означает aFile
быть добавленным
Я упомянул похожий принцип (немного другое решение) в " Gitignore исключить определенные файлы во всех подкаталогах ".
Обратите внимание, что в git 2.9.x/2.10 (середина 2016 года?) Может оказаться возможным повторно включить файл, если родительский каталог этого файла будет исключен, если в пути не будет подстановочного знака.
Nguy Thn Thái Ngọc Duy ( pclouds
) пытается добавить эту функцию:
- commit 506d8f1 для git v2.7.0, возвращен в commit 76b620d git v2.8.0-rc0
- commit 5e57f9c git v2.8.0-rc0,... отменён (!) в коммите 5cee3493 git 2.8.0-rc4.
Здесь это должно работать с git 2.9+:
*
!dest