Git - игнорировать любую папку, расположенную в любом месте внутри хранилища, которая рекурсивно разрешает все - PullRequest
0 голосов
/ 15 мая 2018

Как игнорировать папку с определенным именем (например, Sync), которая может быть расположена в любом месте внутри хранилища, и рекурсивно разрешать все, что в нем, нарушая все остальные правила gitignore?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Предлагаемое решение (!/**/Sync/**/*) не будет работать в одиночку, потому что Невозможно повторно включить файл, если исключен родительский каталог этого файла.

Так что если у вас есть .gitignore с:

*
!.gitignore

Вы должны сначала внести в белый список папки (!*/), а затем исключить файлы (!**/Sync/**, нетнужно для **/*)

Конечный результат будет иметь вид .gitignore:

*
!.gitignore
!*/
!**/Sync/**

Не забудьте проверить любой файл, к которому применимо правило .gitignore:

git check-ignore -v -- aFile

Примечание: / потребуется (для !**/Sync/**), если вы хотите привязать белый список из top вашего хранилища.
Если нет, / не требуется: это будет относительно того, где находится ваш .gitignore).

С gitignore справочная страница :

Если шаблон не содержит косую черту /, Git обрабатывает его как шаблон оболочки и проверяет совпадение с путевым именем относительно расположения файла .gitignore (относительно верхнего уровня работыдерево, если не из файла .gitignore).

0 голосов
/ 15 мая 2018

Обновление: в ответе VONC он правильно упомянул о !*/ и косой черте в начале шаблона.

Unignore папка с определенным именем (например, Sync), которая может быть расположена в любом месте внутрихранилище и рекурсивно разрешить все внутри него, нарушая все остальные правила gitignore:

Внутри .gitignore добавить следующее:

*
!.gitignore
!*/
!/**/Sync/**
...