.gitignore использует глобальное программирование для фильтрации файлов, по крайней мере, в Linux.
Я собираюсь выступить с докладом о кодировании на Meetup, и в процессе подготовки я создал каталог с несколькими подкаталогами, которые названы в соответствии с порядком, в котором я хочу их представить: 01_subject1, 02_subject2, 03_subject3. Каждый подкаталог содержит исходный файл с расширением, зависящим от языка, который компилируется в исполняемый файл, имя которого соответствует имени исходного файла без расширения в соответствии с обычной практикой.
Я исключаю скомпилированные файлы в каталогах с префиксом с цифрой со следующей строкой .gitignore:
[0-9][0-9]_*/[!\.]*
Согласно моему пониманию документации, это не должно работать. Задняя звездочка не должна получиться, потому что она должна соответствовать любому количеству неуказанных символов, включая «.» + расширение. Пропуск конечной звездочки должен завершиться неудачей (и не произойдет), поскольку [!\.]
соответствует только одному непериодическому символу. Тем не менее, я добавил конечную звездочку, как и для регулярного выражения, и это работает. Под работой я подразумеваю, что git замечает изменения в исходном файле, но не существование или изменения в скомпилированных файлах.