Настроить git для отслеживания только одного расширения файла

У меня есть одно дерево каталогов со многими типами разных файлов. В родительском каталоге имеется 300 каталогов. В каждом каталоге могут быть другие подкаталоги.

Я хочу только отслеживать *.cocci во всех подкаталогах. Вот мой .gitignore:

*
!*.cocci

Но это не работает, поскольку файлы на подкаталогах не отслеживаются. Как я могу сказать git, что я хочу только отслеживать *.cocci во всех подкаталогах?

Ответ 1

Прочитайте этот вопрос.

Вы хотите:

# Blacklist everything
*
# Whitelist all directories
!*/
# Whitelist the file you're interested in. 
!*.cocci 

Примечание. Это будет отслеживать файлы только *.cocci. Ваш не работает, потому что вы игнорируете все (это первая строка), которая игнорирует все подкаталоги.

Ответ 2

Невозможно выполнить идентификацию каталога !dir в .gitignore, но тогда все же можно добавить каталог вручную:

git add dir -f

Итак, если файл .gitignore выглядит так:

*
!*.txt

Затем, когда вы делаете git add ., добавляются новые файлы *.txt. Новый каталог не будет добавлен автоматически, его нужно добавить вручную git add dir -f

Ответ 3

Чтобы расширить ответ @simont, если мы хотим, чтобы белые списки *.cocci файлов заданного каталога и его подкаталогов, я ошибочно ввел:

directory/*
!directory/*/
!directory/*.cocci 

Кажется, что это не включает *.cocci файлы под directory/subtree.

Чтобы найти все *.cocci файлы во всех подкаталогах directory, введите следующее:

directory/**
!directory/*/
!directory/**/*.cocci 

Ответ 4

Вы пробовали !*/*.cocci вместо своего !*.cocci?