2013-09-30 2 views
1

У меня возникла проблема, когда синтаксис исключения для gitignore (! FileName.txt) не работает, когда файл является несколькими подкаталогами ниже игнорируемого каталога.git игнорировать исключение не работает несколько подкаталогов ниже игнорируемого каталога

Например:

web/[Ee]xample.[Ww]eb/[Ss]itecore/* 
!web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/[Ss]tandard/[Cc]ustom/32x32* 

не включает в себя файлы в папке 32х32.
я должен вручную добавить их с помощью командной строки, например, так:

git add -f -r web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/[Ss]tandard/[Cc]ustom/32x32 

Есть ли способ использовать оператор исключения в такой ситуации?

+0

И что делает ** ['git check-ignore'] (http://stackoverflow.com/a/18953923/6309) ** говорит? Какое фактическое правило игнорирования применяется или не применяется? – VonC

+0

Я попытался выполнить git check-ignore в bash, и он говорит, что команда не найдена. –

+0

Это довольно недавняя команда. Какую версию git вы используете? – VonC

ответ

1

Повторное включение файла, который «является несколькими подкаталогами под игнорируемым каталогом» (как вы пытаетесь), не работает, потому что «невозможно повторно включить файл, если родительский каталог этого файла исключен» [source].

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

Для примера он хотел бы следующим образом:

web/[Ee]xample.[Ww]eb/[Ss]itecore/* 

!web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/ 
web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/** 
!web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/ 
web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/** 
!web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/[Ss]tandard/ 
web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/[Ss]tandard/** 
!web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/[Ss]tandard/[Cc]ustom/ 
web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/[Ss]tandard/[Cc]ustom/** 
!web/[Ee]xample.[Ww]eb/[Ss]itecore/[Ss]hell/[Tt]hemes/[Ss]tandard/[Cc]ustom/32x32* 

Источник: мой соответствующий ответ here.

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

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