.gitignore полезный файл, который позволяет исключить ненужные каталоги и файлы. Но с ним надо быть аккуратнее, иначе могут быть проблемы с добавлением новых файлов в проект. Для правильной настройки .gitignore нужно понять, как он работает.
Предположим, у нас есть дерево проекта. Но в этом дереве много каталогов и файлов, которые не требуется отслеживать. Из серии «изменился, ну и пёс с ним». Как нам сделать так, чтобы git их игнорировал?
На примере WordPress пропишем в файл .gitignore:
wp-admin/*
wp-content/*
wp-includes/*
Все каталоги будут исключены, кроме рутового. Но если добавить строку:
!wp-content/themes/*
То по идее, git должен исключить каталог с темами и отслеживать в нем изменения. Да, он так и поступит. Но! Если вы удалите файл - он его удалит из проекта, а если переименуете или добавите новый файл, то он в проекте не появится, т.к. он попадает под маску: wp-content/*
Это получается надо добавлять все файлы по-отдельности?
Необязательно. Но в некоторых случаях придется. В случае с темами WordPress нужно использовать несколько строк исключения:
wp-content/languages/*
wp-content/plugins/*
wp-content/upgrade/*
wp-content/uploads/*
wp-content/themes/twentytwentytwo/*
Здесь мы исключаем все каталоги, кроме themes и в каталоге themes игнорируем каталог с темой twentytwentytwo. Все остальные каталоги и файлы попадут в проект.
Если говорить о WordPress, то во всех каталогах лежат файлы-заглушки index.php или wp-cron.php и т.п. Чтобы их исключить просто прописываем строки:
index.php
wp-*.php
И все файлы с именами, попадающие под маску будут исключены из проекта, даже в тех каталогах, которые мы не игнорируем.
Как проверить корректность .gitignore
Добавляем новый файл в свой проект. Если git его подхватил, значит все хорошо. А в случае, когда нет, то в консоли запускаем команду: git add /path/path/file.ext и если этот файл попадает под какую-то маску игнорирования, git выдаст предупреждение.
Ну а если вы не часто переименовываете или добавляете новые файлы, то git -f add /path/path/file.ext решит проблему.