.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]