# Игнорирование файлов в Git

В проектах часто встречаются файлы, которые мы не хотели бы сохранять в системе Git. Это могут быть временные файлы, порождаемые вашим кодом, файлы с кешем, а также файлы с паролями.

Мы можем принудительно заставить Git игнорировать такие папки и файлы. Это делается с помощью специального файла `.gitignore`, размещаемого в папке с вашим проектом.

В этом файле на каждой строке нужно писать путь к файлу или папке, которые мы хотим игнорировать. Давайте посмотрим на примерах, какой здесь допустим синтаксис.

## Пример

Косая черта перед именем файла соответствует файлу в корне репозитория:

`/debug.log`

Для примера будут проигнорированы следующие файлы:

<$structure$> debug.log <-structure->

Но не:

<$structure$> logs/debug.log <-structure->

## Пример

Без косой черты в начале будут игнорироваться файлы и в подпапках:

`debug.log`

Для примера будут проигнорированы следующие файлы:

<$structure$> debug.log logs/debug.log <-structure->

## Пример

Без косой черты в конце будут игноророваться и файлы без расширения, и папки с таким именем:

`logs`

Для примера будут проигнорированы следующие файлы:

<$structure$> logs logs/debug.log logs/latest/foo.bar build/logs build/logs/debug.txt <-structure->

## Пример

С косой чертой в конце будут игнорироваться только папки:

`logs/`

Для примера будут проигнорированы следующие папки:

<$structure$> logs/ logs/debug.log logs/latest/foo.bar build/logs build/logs/debug.txt <-structure->

## Пример

Две звездочки в начале папки заставят игнорировать все папки содержащую такую подпапку в пути:

`**/logs`

Для примера будут проигнорированы следующие файлы:

<$structure$> logs/debug.log logs/monday/foo.bar build/logs/debug.log <-structure->

## Пример

Две звездочки можно также использовать для сопоставления файлов на основе их имени и имени родительской папки:

`**/logs/debug.log`

Для примера будут проигнорированы следующие файлы:

<$structure$> logs/debug.log build/logs/debug.log <-structure->

Но не:

<$structure$> logs/build/debug.log <-structure->

## Пример

Одна звездочка — это подстановочный знак, который может соответствовать как нескольким символам, так и ни одному:

`*.log`

Для примера будут проигнорированы следующие файлы:

<$structure$> debug.log foo.log .log logs/debug.log <-structure->

## Пример

Добавление восклицательного знака в начало шаблона отменяет действие шаблона. Если файл соответствует некоему шаблону, но при этом также соответствует отменяющему шаблону, указанному после, такой файл не будет игнорироваться:

`*.log !important.log`

Для примера будут проигнорированы следующие файлы:

<$structure$> important.log <-structure->

Но не:

<$structure$> file.log <-structure->

## Пример

Знак вопроса соответствует строго одному символу:

`debug?.log`

Для примера будут проигнорированы следующие файлы:

<$structure$> debug0.log debugg.log <-structure->

Но не:

<$structure$> debug10.log <-structure->

## Пример

Квадратные скобки соответствуют одному символу из указанного набора:

`debug[01].log`

Для примера будут проигнорированы следующие файлы:

<$structure$> debug0.log debug1.log <-structure->

Но не:

<$structure$> debug2.log debug01.log <-structure->

## Пример

Квадратные скобки можно также использовать для указания соответствия одному символу из заданного диапазона:

`debug[0-9].log`

Для примера будут проигнорированы следующие файлы:

<$structure$> debug0.log debug1.log <-structure->

Но не:

<$structure$> debug10.log <-structure->

## Пример

Восклицательный знак можно использовать для указания соответствия любому символу, кроме символов из указанного набора:

`debug[!01].log`

Для примера будут проигнорированы следующие файлы:

<$structure$> debug2.log <-structure->

Но не:

<$structure$> debug0.log debug1.log debug01.log <-structure->

## Пример

Диапазоны могут быть цифровыми или буквенными:

`debug[a-z].log`

Для примера будут проигнорированы следующие файлы:

<$structure$> debuga.log debugb.log <-structure->

Но не:

<$structure$> debug1.log <-structure->

## Пример

Две звездочки соответствуют множеству каталогов или ни одному:

`logs/**/debug.log`

Для примера будут проигнорированы следующие файлы:

<$structure$> logs/debug.log logs/monday/debug.log logs/monday/pm/debug.log <-structure->

## Пример

Подстановочные символы можно использовать и в именах каталогов:

`logs/*day/debug.log`

Для примера будут проигнорированы следующие файлы:

<$structure$> logs/monday/debug.log logs/tuesday/debug.log <-structure->

Но не:

<$structure$> logs/latest/debug.log <-structure->

## Практические задачи

Сделайте так, чтобы игнорировались файлы из папки `cache`.

Сделайте так, чтобы игнорировались файлы из папок `cache` и `tmp`.

Сделайте так, чтобы игнорировался файл `err.txt` и папка `tmp`.

← →
↑