В системе Git можно настроить возможность автоматического игнорирования файлов.
То есть, можно указать Git, что файлы определенного типа не нужно отслеживать. Выполняется такая настройка с помощью специального файла .gitignore. Подобная возможность отключения отслеживания файлов в системе Git может понадобиться в случае, когда автоматически генерируются служебные файлы.
К примеру, если развертывать в проекте Compass, то будет создан каталог .sass, в который данный фреймворк помещает свой кэш, генерируемый автоматически при каждом изменении любого из файлов проекта.
Давайте на практике разберемся, каким образом можно настроить игнорирование файлов в Git с помощью .gitignore.
Создание нового проекта
Создаю новый проект с именем git_ignore, в котором помещаю несколько файлов разного типа:
$ mkdir git_ignore
$ cd git_ignore/
$ touch index.html style.cssИнициализирую репозиторий Git в директории .git_ignore, индексирую созданные файлы и фиксирую их:
$ git init
Initialized empty Git repository in /home/aaron/Projects/git_ignore/.git/
$ git add .
$ git commit -m 'First Commit'Вывод команды git status показывает, что все чисто:
$ git status
On branch master
nothing to commit, working directory cleanНастройка игнорирования в .gitignore
Для настройки игнорирования определенных типов файлов в системе Git необходимо первоначально создать файл .gitignore:
$ touch .gitignoreОткроем созданный файл .gitignore в любом редакторе:
$ nano -w .gitignore… и пропишем в нем следующие строки:
*.txt
*.mdТем самым мы говорим Git, что нужно игнорировать все файлы с расширением .txt и .md внутри директории git_ignore. То есть, система контроля не будет отслеживать изменения во всех файлах этих типов.
Проиндексируем и зафиксируем изменения (создание файла настроек .gitignore), а затем проверим данный факт. Для этого в рабочей директории git_ignore создаю еще несколько типов файлов:
$ touch main.css readme.txt humans.mdЗатем выполняю индексацию всех файлов, которые были добавлены или изменены в рабочем каталоге:
$ git add .И смотрю, что мне показывает команда git status:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: main.cssСистема Git увидела только новый файл main.css. Два других файла - readme.txt и humans.md - проигнорированы системой. Отлично! Зафиксирую изменения.
Можно создать еще пару файлов в разных директориях и посмотреть на вывод команды git status в консоли:

Усложнить задачу игнорирования в .gitignore
Можно усложнить задачу игнорирования в Git, добавив в файл .gitignore директорию, содержимое которой также должно игнорироваться. Пускай это будет обычная директория ignore и скрытая директория .ignore (с точкой перед именем):
Добавлю в файл .gitignore пару строк таким образом:
$ cat .gitignore
*.txt
*.md
ignore/
.ignore/Проиндексирую изменения, а затем выполню операции по созданию директорий и файлов внутри них:
$ mkdir ignore
$ mkdir .ignore
$ touch ignore/reset.css
$ touch .ignore/normilize.cssВновь ввожу команду просмотра состояния репозитория Git:
$ git status
On branch master
nothing to commit, working directory cleanВсе сработало - Git не захотел видеть директории ignore, .ignore, а также их содержимое. Отлично!
Шаблоны в файле .gitignore
Для файла .gitignore доступны шаблоны, с помощью которых можно задать маски для выборки необходимых типой файлов. Однако, обширная тема шаблонов выходит за рамки данной статьи. При желании можно почитать по теме шаблонов в книге “Pro Git - профессиональный контроль версий”.