Файл gitignore — примеры и документация
Мы конечно могли бы вручную добавлять нужные файлы в репозиторий, например так:
git add path/to/file
Однако это было бы очень трудоемко. Гораздо проще использовать команду:
git add .
Которая добавит все файлы в каталоге проекта.
Но что если нам не нужны абсолютно все файлы, а есть файлы например в каталоге /cache или /images или /runtime проекта, которые генерируются в процессе работы. Они не должны быть добавлены в репозиторий.
Тут нам и нужен .gitignore. Вам нужно его самим создать и разместить в корне проекта либо нужной подпапке.
Где должен находиться этот файл
Файл может находиться в корне проекта или любом подкаталоге.
Либо можно задать глобальный файл gitignore, таким образом:
$ git config --global core.excludesfile ~/.gitignore_global
Таким образом вы сможете записать в глобальный файл ~/.gitignore_global настройки, общие для всех ваших проектов. В нем могут храниться например файлы для игнорирования, которые специфичны для вашей IDE, и по этому не логично добавлять их в репозиторий. Однако файлы, которые специфичны для конкретного проекта, обязательно нужно добавлять в .gitignore самого проекта.
Примеры содержимого .gitignore файла
# строки начинающиеся на # - это комментарии, они не учитываются # Исключить все файлы с расширение .a *.a # Но отслеживать файл lib.a даже если он подпадает под исключение выше !lib.a # Исключить файл TODO в корневом каталоге, но не файл в subdir/TODO /TODO # Игнорировать все файлы в каталоге build/ build/ # Игнорировать файл doc/notes.txt, но не файл doc/server/arch.txt doc/*.txt # Игнорировать все .txt файлы в каталоге doc/ doc/**/*.txt
Подробнее о шаблонах игнорирования
| Шаблон | Примеры соответствия | Пояснение* |
|---|---|---|
| **/logs | logs/debug.log logs/monday/foo.bar build/logs/debug.log | Добавьте в начало шаблона две звездочки, чтобы сопоставлять каталоги в любом месте репозитория. |
| **/logs/debug.log | logs/debug.log build/logs/debug.log но не logs/build/debug.log | Две звездочки можно также использовать для сопоставления файлов на основе их имени и имени родительского каталога. |
| *.log | debug.log foo.log .log logs/debug.log | Одна звездочка — это подстановочный знак, который может соответствовать как нескольким символам, так и ни одному. |
| *.log !important.log | debug.log trace.log но не important.log logs/important.log | Добавление восклицательного знака в начало шаблона отменяет действие шаблона. Если файл соответствует некоему шаблону, но при этом также соответствует отменяющему шаблону, указанному после, такой файл не будет игнорироваться. |
| .log !important/.log trace.* | debug.log important/trace.log но не important/debug.log | Шаблоны, указанные после отменяющего шаблона, снова будут помечать файлы как игнорируемые, даже если ранее игнорирование этих файлов было отменено. |
| /debug.log | debug.log но не logs/debug.log | Косая черта перед именем файла соответствует файлу в корневом каталоге репозитория. |
| debug.log | debug.log logs/debug.log | По умолчанию шаблоны соответствуют файлам, находящимся в любом каталоге |
| debug?.log | debug0.log debugg.log но не debug10.log | Знак вопроса соответствует строго одному символу. |
| debug[0-9].log | debug0.log debug1.log но не debug10.log | Квадратные скобки можно также использовать для указания соответствия одному символу из заданного диапазона. |
| debug[01].log | debug0.log debug1.log но не debug2.log debug01.log | Квадратные скобки соответствуют одному символу из указанного набора. |
| debug[!01].log | debug2.log но не debug0.log debug1.log debug01.log | Восклицательный знак можно использовать для указания соответствия любому символу, кроме символов из указанного набора. |
| debug[a-z].log | debuga.log debugb.log но не debug1.log | Диапазоны могут быть цифровыми или буквенными. |
| logs | logs logs/debug.log logs/latest/foo.bar build/logs build/logs/debug.log | Без косой черты в конце этот шаблон будет соответствовать и файлам, и содержимому каталогов с таким именем. В примере соответствия слева игнорируются и каталоги, и файлы с именем logs |
| logs/ | logs/debug.log logs/latest/foo.bar build/logs/foo.bar build/logs/latest/debug.log | Косая черта в конце шаблона означает каталог. Все содержимое любого каталога репозитория, соответствующего этому имени (включая все его файлы и подкаталоги), будет игнорироваться |
| logs/ !logs/important.log | logs/debug.log logs/important.log | Минуточку! Разве файл logs/important.log из примера слева не должен быть исключен нз списка игнорируемых? Нет! Из-за странностей Git, связанных с производительностью, вы не можете отменить игнорирование файла, которое задано шаблоном соответствия каталогу |
| logs/**/debug.log | logs/debug.log logs/monday/debug.log logs/monday/pm/debug.log | Две звездочки соответствуют множеству каталогов или ни одному. |
| logs/*day/debug.log | logs/monday/debug.log logs/tuesday/debug.log but not logs/latest/debug.log | Подстановочные символы можно использовать и в именах каталогов. |
| logs/debug.log | logs/debug.log но не debug.log build/logs/debug.log | Шаблоны, указывающие на файл в определенном каталоге, задаются относительно корневого каталога репозитория. (При желании можно добавить в начало косую черту, но она ни на что особо не повлияет.) |
Что если файлы из gitignore уже добавлены в репозиторий
Обратите внимание, что если файлы уже добавлены в git репозиторий, то добавление их в .gitignore не удалит эти файлы. Изменения в них будут продолжать отслеживаться и входить в коммиты, несмотря на то, что они есть в .gitignore .
Нам придется вручную их удалить из репозитория.
Очень удобная команда bash, которая удалит из git репозитория те файлы, которые содержатся в файлах .gitignore :
git rm --cached `git ls-files -i --exclude-from=.gitignore`
То же самое для Powershell
foreach ($i in iex ‘git ls-files -i —exclude-from=.gitignore’)
При выполнении этой команды, файлы останутся у вас на диске, однако из репозитория они будут удалены.
Либо можно удалять файлы вручную, таким образом:
git rm --cached path/to/file
Либо если нам нужно удалить целую директорию из git, то воспользуемся следующей командой:
git rm -r --cached path/to/directory
Либо так мы могли бы удалить все файлы с расширением .log в папке log:
git rm --cached log/\*.log
Параметр —cached означает, что файлы будут удалены только из раздела «проиндексированных файлов». На диске (рабочем каталоге) они останутся нетронутыми.
Как понять, почему игнорируется конкретный файл
Запустите команду вместо path/to/file следует указать путь к файлу.
git check-ignore -v path/to/file
В итоге мы получим ответ, в котором содержится конкретная строка .gitignore, благодаря которой данный файл игнорируется.
Отобразить все игнорируемые файлы:
git status --ignored
Очистить проект от всех игнорируемых файлов:
git clean -fX
Используйте с осторожностью. Убедитесь что у вас есть резервная копия.
Игнорирование в Git
Git рассматривает каждый файл в вашей рабочей копии как файл одного из трех нижеуказанных типов.
1. Отслеживаемый файл — файл, который был предварительно проиндексирован или зафиксирован в коммите.
2. Неотслеживаемый файл — файл, который не был проиндексирован или зафиксирован в коммите.
3. Игнорируемый файл — файл, явным образом помеченный для Git как файл, который необходимо игнорировать.
Игнорируемые файлы — это, как правило, артефакты сборки и файлы, генерируемые машиной из исходных файлов в вашем репозитории, либо файлы, которые по какой-либо иной причине не должны попадать в коммиты. Вот некоторые распространенные примеры таких файлов:
- кэши зависимостей, например содержимое /node_modules или /packages ;
- скомпилированный код, например файлы .o , .pyc и .class ;
- каталоги для выходных данных сборки, например /bin , /out или /target ;
- файлы, сгенерированные во время выполнения, например .log , .lock или .tmp ;
- скрытые системные файлы, например .DS_Store или Thumbs.db ;
- личные файлы конфигурации IDE, например .idea/workspace.xml .
Игнорируемые файлы отслеживаются в специальном файле .gitignore , который регистрируется в корневом каталоге репозитория. В Git нет специальной команды для указания игнорируемых файлов: вместо этого необходимо вручную отредактировать файл .gitignore , чтобы указать в нем новые файлы, которые должны быть проигнорированы. Файлы .gitignore содержат шаблоны, которые сопоставляются с именами файлов в репозитории для определения необходимости игнорировать эти файлы.
- Игнорирование файлов в Git
- Шаблоны игнорирования в Git
- Общие файлы .gitignore в вашем репозитории
- Персональные правила игнорирования в Git
- Глобальные правила игнорирования в Git
- Игнорирование ранее закоммиченного файла
- Коммит игнорируемого файла
- Скрытие изменений в игнорируем файле
- Отладка файлов .gitignore
Игнорирование файлов в Git — Файл gitignore


Если у вас возникли файлы, которые вы не хотите добавлять в репозитории, на помощь придет файл .gitignore. Часто это файлы, пароли, сборки или файлы системы. На протяжении рабочего времени, эти файлы будут только увеличиваться в объеме. По итогу загрязняя ваш репозиторий.
Чтобы избежать загрузки лишних файлов, нужно в своём проекте создать файл с названием .gitignore. Обычного создания файла конечно же не хватит, данный файл еще следует нам настроить.
Какие файлы нужно исключить?
- Файлы редакторов IDE
- Выполняемые файлы — log, lock, cache или непостоянные файлы (tmp).
- Файлы системы, для Mac — .DS_Store, для Windows — Thumbs.db
- Директории зависимостей — vendor / node_modules.
- Build директории — public / dist.
- Файлы с секретной информацией, такие как пароли или ключи API.
Правила синтаксиса файла .gitignore
Синтаксис gitignore применяют glob формат с целью выбора файлов.
- 1 строчка — один принцип,
- Пустые строки пропускаются,
- (#) — означает комментарии, создавать следует в начале строки
- (/) — в начале строки указывает, что принцип используется только лишь в файлах и папках, которые находятся в том же каталоге, как и файл .gitignore,
- (*) указывает на любое число знаков(ноль или больше),
- (?) заменяет от нуля до единого знака. Можно указывать в различном месте,
- (**) применяют с целью указания каждого числа поддиректорий,
- (!) в начале строчки значит инвертирование правила, обязан для указания исключений из правил игнорирования,
- (\) — применяют с целью экранирования спецсимволов, например, чтобы игнорировать файл с именем «!file!.txt», нужно написать такое правило: «\!file!.txt»,
- Для исключения всего каталога, правило обязано заканчиваться на (/), в другом случае правило считается именованием файла.
Пример .gitignore файла
Пример был взят из нашего личного проекта
# Node artifact files
node_modules/
dist/
# Compiled Java class files
*.class
# Log files
*.log
# Package files
*.jar
# Maven
target/
dist/
# IDE
.idea/
.vscode/
# Unit test reports
TEST*.xml
# Generated by MacOS
.DS_Store
# Generated by Windows
Thumbs.db
# Applications
*.app
*.exe
*.war
# Large media files
*.mp4
*.tiff
*.avi
*.flv
*.mov
*.wmvКомментарии
# — считается объяснением и игнорирует строки. Пустые строки применяют для лучшей читабельности кода.
Рассечение
(/) — предполагает ограничитель каталогов. Косая черта в начале шаблона относится к каталогу, в котором находится .gitignore.
Если пример начинается с /, то к нему принадлежат файлы и каталоги, которые находятся в корне.
Если пример начинается без /, то к нему принадлежат все файлы, директории и поддиректории.
Если пример заканчивается /, то он относится только к директориям. Если директория игнорируется, то и его внутри лежащие папки и файлы тоже.Литеральные имена файлов
Легкий способ добавить файл в исключение — это прописать полный путь. assets/idea.log
Знаки подстановки
* – Равно нулю или более символов.
**- Объединенные звёздочки подходят любому файлу, нуля или больше каталогов. Когда за ним стоит слеш ( /), он соответствует только каталогам.
? – Относится к любому единичному знаку.
app/** = Совпадает с любым файлом внутри каталога app.Квадратные скобки
[. ] – подходит каждому знаку, находящихся в квадратные скобки. Если два символа связаны через дефис, то это указан диапазон символов. Диапазон содержит в себе все без исключения знаки, которые находятся между этими двумя символами. Диапазон можно задать в буквенном или числовом формате.
В случае если первый знак после [ является восклицательным знаком (!), то образец подходит любому знаков, кроме знаков из указанного набора.
*.[ae] = filename.e, filename.a
*.[!ae] = filename.x, filename.3, filename.sОтрицательные образцы
Если строка начинается с (!), она откладывает (вторично включает) любой файл, который игнорируется предшествующим стандартом. Исключением считается вторичное добавления файла снизу вашего документа, если исключен его родительский каталог.
Как исключить файлы, которые уже отслеживаются?
Случается так, когда файл уже был добавлен в отслеживание по ошибки/ необходимо прекратить отслеживание.
Сначала выполните всевозможные неполные изменения кода, а уже потом используйте команду (команда для всех файлов). Чтобы отменить отслеживание одного файла, воспользуйтесь командой (git rm -r —cached filename) git rm -r —cached . Таким образом мы удалили файл из индекса, но не удалили его из рабочего дерева.
Эта команда убирает все модифицированные файлы из индекса. Затем пропишите новую инициализацию файлов
git add .Осталось добавить коммит
git commit -m “gitignore is working”Личные правила игнорирования
Заготовки, специфичные для вашего местного репозитория и никак не будут доступны в иных репозиториях, обязаны добавляться в файле .git/info/exclude.
Например, этот файл можно использовать для игнорирования сгенерированных файлов из ваших личных инструментов проекта.
Глобальный .gitignore
В Git присутствует замечательная вероятность как глобальный файл .gitignore. Вы сможете настроить игнорирования для любого Git репозитория в локальной системе.
Данный файл может храниться в любом месте. Популярное место для него — это домашний каталог. Необходимо создать файл и настроить Git для его использования.
Для того чтобы определить ~/.gitignore_global в качестве глобального файла игнорирования Git, выполните список действий:
- Создаем файл: touch ~/.gitignore_global
- Добавляем файл в Git-конфигурацию: git config —global core.excludesfile ~/.gitignore_global
- Открываем файл в редакторе и добавляем кастомные настройки.
Глобальный гитигнор будет нужен для тех файлов, которые никогда не будут находиться в репозитории, такие как сборщики или автоматически созданные файлы редакторов.
Отладка файла .gitignore
Если у вас ряд файлов gitignore, то допустить ошибку очень просто. По итогу может получиться ненужный файл в репозитории. Для того чтобы отследить ошибки файлов, используйте команду git check-ignore с опцией -v, она показывает, что нужно отобразить данные совпадающего шаблона
Для проверки файла jar.lock, нужно осуществить команду:
git check-ignore -v www/jar.lockПосле этого вы увидите примерно такое сообщение, которое отобразит получившийся путь к файлу
www/.gitignore:27:/jar.lock
www/jar.lock
Файл может находиться не только в вашем проекте.Просмотр всех игнорируемых файлов
Как быстро посмотреть файлы, которые проигнорированы? Используйте команду
git status —ignoredЗаключение
Файл.gitignore даёт возможность нам исключать лишние файлы для репозитория. При этом его можно отлично использовать в различных целях. Существует сервис по созданию файла gitignore.io даёт возможность сгенерировать файл .gitignore для ваших предназначений.
Игнорирование файлов — Введение в Git
В процессе работы над любым проектом в директории с кодом создаются файлы, которые не являются частью исходного кода. Все эти файлы можно условно разделить на несколько групп:
- Инструментарий
- Служебные файлы, добавляемые операционной системой — например, .DS_Store в MacOS
- Конфигурационные и временные файлы редакторов — например, .idea или .vscode
- Логи — в них содержится полезная информация для отладки, которая собирается во время запуска и работы приложения
- Кеши — файлы, которые нужны для ускорения разных процессов
- Результаты сборки проекта — например, после компиляции или сборки фронтенда
- Зависимости, которые устанавливаются во время разработки — например, node_modules или vendor
- Результаты выполнения тестов — например, информация о покрытии кода тестами
Все это в обычной ситуации не должно попадать в репозиторий. В этом уроке вы узнаете, как проигнорировать эти файлы.
Как правило, эти файлы не несут никакой пользы с точки зрения исходного кода. Они создаются:
- Автоматически (кеши, логи)
- По запросу (например, скачиваются зависимости или собирается проект)
Главная проблема с этими файлами в их постоянном изменении — особенно при очень больших размерах проекта. Если добавлять их в репозиторий, то практически в каждом коммите будут не только изменения исходного кода, но и пачка изменений в этих файлах. Читать историю таких коммитов крайне сложно.
Git позволяет гибко настраивать игнорирование определенных файлов и директорий. Делается это с помощью файла .gitignore, который нужно создать в корне проекта. В этот файл с помощью текстового редактора добавляются имена файлов и директорий, которые надо игнорировать:
# В этом файле можно оставлять комментарии # Имя файла .gitignore # Файл нужно создать самостоятельно # Каждая строчка — это шаблон, по которому происходит игнорирование # Игнорируем файл в любой директории проекта access.log # Игнорируем директорию в любой директории проекта node_modules/ # Игнорируем каталог в корне рабочей директории /coverage/ # Игнорируем все файлы с расширением sqlite3 в директории db # При этом не игнорируются такие же файлы внутри любого вложенного каталога в db # Например, /db/something/lala.sqlite3 /db/*.sqlite3 # Игнорировать все .txt файлы в каталоге doc/ на всех уровнях вложенности doc/**/*.txtGit поддерживает игнорирование файлов, но сам его не настраивает. Для игнорирования файлов и директорий, программист должен создать файл .gitignore в корне проекта и добавить его в репозиторий. Пример вы можете посмотреть здесь .
Продолжим работать с .gitignore:
touch .gitignore # Добавляем в файл правила игнорирования по примеру выше git add .gitignore git commit -m 'update gitignore'Как только .gitignore создан и в него добавлен какой-то файл или директория, игнорирование заработает автоматически. Все новые файлы, попадающие под игнорирование, не отобразятся в выводе команды git status .
Иногда бывает такое, что программист случайно уже добавил в репозиторий файл, который нужно проигнорировать. В этой ситуации недостаточно обновить правила игнорирования. Дополнительно придется удалить файл или директорию из Git с помощью git rm и закоммитить.
Самостоятельная работа
- Добавьте файл .gitignore в проект
- Добавьте файл INFO.md в список игнорируемых файлов
- Удалите файл INFO.md из репозитория
- Создайте файл INFO.md и убедитесь в том, что git status его не отображает
- Залейте изменения на GitHub
Дополнительные материалы
- Коллекция полезных gitignore для всех ситуаций
- Инструкция от Atlassian по gitignore

Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Об обучении на Хекслете
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Урок «Как эффективно учиться на Хекслете»
- Вебинар « Как самостоятельно учиться »
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях: