Подробнее о файле .gitignore

Feb 14, 2019 in GIT

Содержание

Админу на хлеб с маслом - 50 руб.

.gitignore служит для указания в нём файлов и папок, которые необходимо скрыть от системы контроля версий git.

Как правило, скрывают файлы или папки, которые автоматически генерируют своё содержимое, либо имеют конфигурационные параметры, которые могут различаться у тех, кто совместно работает над проектом.

Приведу простой пример: у вас имеется файл "/config/db.php", в нём прописаны параметры подключения к БД, причём на вашей локальной машине и на сервере эти параметры будут разниться. А если эти файлы различны, то git будет при каждом pull/push ругаться на то, что имеется конфликт.

Другой пример: если вы используете NetBeans и настройки своего проекта храните непосредственно в папке с проектом, то вам необходимо закрыть от git`а директорию "nbproject", чтобы другие участники вашего проекта не страдали от того, что вы случайно закомитили эту директорию.

Данная ситуация легко разрешатся использованием файла .gitignore, который можно разместить в папке "/config/.gitignore" со следующим содержимым:


/db.php

Одна эта строчка укажет git, что необходимо игнорировать файл " db.php", который лежит в этой директории.

Рекомендуется размещать файл .gitignore в корне вашего приложения или проекта JetBrains, таким образом он всегда будет под рукой и отпадает необходимость вспоминать, где вы оставили другие такие же файлы.

Вот некоторые правила синтаксиса этого файла:

  • Одна строчка - одно правило,
  • Пустые строки игнорируются,
  • Комментарии доступны через решётку(#) в начале строки,
  • Символ "/" в начале строки указывает, что правило применяется только к файлам и папкам, которые располагаются в той же папке, что и сам файл .gitignore,
  • Доступно использовать спецсимволы: звёздочка(*) заменяет любое количество символов(ноль или больше), вопросик(?) заменяет от нуля до одного символа. Можно размещать в любом месте правила,
  • Две звёздочки(**) используются для указания любого количества поддиректорий, подробнее смотри ниже в примерах,
  • Восклицательный знак(!) в начале строки означает инвертирование правила, необходим для указания исключений из правил игнорирования,
  • Символ "\" используется для экранирования спецсимволов, например, чтобы игнорировать файл с именем "!readme!.txt", нужно написать такое правило: "\!readme!.txt",
  • Для игнорирования всей директории, правило должно оканчиваться на слэш(/), в противном случае правило считается именем файла.

Привожу наглядный пример файла .gitignore:


# Игнор-лист файлов проекта
# Игнорировать ВСЕ файлы и директории, включая поддиректории и файлы в них
*
# ---- ФАЙЛЫ ----
# Игнорирование по типу файла, будут игнорироваться в АБСОЛЮТНО всех директориях
# Например /files/data.zip, /server.log, /uploads/users/data/info.xls
*.zip
*.log
*.pdf
*.xls
# Игнорирование файла во ВСЕХ директориях
# Например /params/db/config.php, /config.php
config.php
# Игнорирование конкретного файла ТОЛЬКО в корне проекта
# (корнём считается расположение файла .gitignore)
# Например НЕ БУДЕТ проигнорирован файл /db/config.php
/config.php
# Игнорирование конкретного файла ТОЛЬКО в указанной директории
# Например НЕ БУДЕТ проигнорирован файл /prod/params/config.php
/params/config.php
# ---- ДИРЕКТОРИИ ----
# Игнорирование всех файлов и папок ТОЛЬКО в конкретной директории(включая поддиректории и файлы в них)
# Например /images/user.jpg, /images/company/logo.png
# НЕ БУДУТ проигнорированы файлы и папки /prod/images/user.jpg
/images/*
# Игнорирование всех файлов и папок в ЛЮБЫХ директориях с указанным именем
# Например /images/user.jpg, /core/images/user.jpg
images/*
# Игнорирование ВСЕХ html-файлов в ОДНОЙ КОНКРЕТНОЙ директории(НЕ ВКЛЮЧАЯ поддиректории)
# Например /private/index.html
# НЕ БУДУТ проигнорированы файлы в /private/ivan/index.html
/private/*.html
# Игнорирование ВСЕХ html-файлов в КОНКРЕТНОЙ директории ВКЛЮЧАЯ поддиректории
# Например /private/info.html, /private/users/ivan/info.html
/private/**/*.html
# ---- РАЗНОЕ ----
# Исключение из игнорирования
# Игнорирование ВСЕХ файлов и папок внутри директории /secret,
# за исключением файла /secret/free.txt, он не будет проигнорирован
/secret/*
!/secret/free.txt
# Игнорирование файла с именем, содержащим спецсимволы
# Например !readme!.txt
\!readme!.txt
# Игнорирование всех JPG и JPEG файлов внутри директорий,
# которые начинаются на "h" и МОГУТ содержать ещё один символ после
# Например /images/h4/user.jpg, /images/h/company.jpeg
/images/h?/*.jp?g

В репозитории https://github.com/github/gitignore вы можете найти примеры .gitignore-файлов для своего проекта. Например, если вы используете Yii framework, то вам следует обратить внимание на файл https://github.com/github/gitignore/blob/master/Yii.gitignore, в нём перечислены основные директории, которые следует исключить из git-репозитория.

У некоторых может возникнуть вопрос:

"Я добавил в .gitignore файл/директорию, но после пуша в репозиторий там сохранился игнорируемый файл/директория, и если сделать git clone, то файл/директория так же склонируются".

Ответ таков: Нужно удалить из репозитория игнорируемые файлы/директории, делается это командой. После этого файл окончательно пропадёт из отслеживаемых git`ом.


git rm --cached [file]

Создание пользовательского .gitignore

https://www.gitignore.io/