Как игнорировать файлы и папки в Git — файл .gitignore
Git – это популярная система контроля версий. Благодаря Git разработчики могут сотрудничать и без проблем работать над проектами совместно.
Git позволяет отслеживать изменения, которые вы вносите в проект с течением времени. Помимо этого, он позволяет вернуться к предыдущей версии, если вы вдруг решили не вносить изменение.
Git работает по следующему принципу: вы размещаете файлы в проекте с помощью команды git add
, а затем фиксируете (коммитите) их с помощью команды git commit
.
При совместной работе над проектами могут возникнуть ситуации, когда вы не захотите, чтобы какие-то файлы или части проекта были видны всем участникам команды.
Как же сделать так, чтобы Git игнорировал и не отслеживал определенные файлы?
С помощью файла .gitignore
.
В этой статье вы узнаете, что такое файл .gitignore
, как его создать и как использовать для игнорирования некоторых файлов и папок. Также вы узнаете, как можно заставить Git игнорировать уже закоммиченый файл.
Что такое файл .gitignore
? Для чего он нужен?
Каждый из файлов в любом текущем рабочем репозитории Git относится к одному из трех типов:
- Отслеживаемые – это все файлы и каталоги, о которых знает Git. Это файлы и каталоги, которые были недавно размещены (добавлены с помощью
git add
) и зафиксированы (закоммичены с помощьюgit commit
) в главном репозитории. - Неотслеживаемые – это новые файлы и каталоги, которые созданы в рабочем каталоге, но еще не размещены (или добавлены с помощью команды git add).
- Игнорируемые – это все файлы и каталоги, которые полностью исключаются и игнорируются, и никто о них в репозитории Git не знает. По сути, это способ сообщить Git о том, какие неотслеживаемые файлы так и должны остаться неотслеживаемыми и не должны фиксироваться.
Все файлы, которые должны быть проигнорированы, сохраняются в файле .gitignore
.
Файл .gitignore
– это обычный текстовый файл, который содержит список всех указанных файлов и папок проекта, которые Git должен игнорировать и не отслеживать.
Как создать файл .gitignore
?
Обычно файл .gitignore
помещается в корневой каталог репозитория. Корневой каталог также известен как родительский или текущий рабочий каталог. Корневая папка содержит все файлы и другие папки, из которых состоит проект.
Тем не менее, вы можете поместить этот файл в любую папку в репозитории. Если на то пошло, то у вас может быть несколько файлов .gitignore
.
Для того, чтобы создать файл .gitignore
в Unix-подобной системе, такой как macOS или Linux, с помощью командной строки, откройте приложение терминала (например, в macOS это Terminal.app). Затем для того, чтобы создать файл .gitignore
для вашего каталога, перейдите в корневую папку, которая содержит проект, и при помощи команды cd введите следующую команду:
touch .gitignore
Файлы, перед именем которых стоит точка ., по умолчанию скрыты.
Скрытые файлы нельзя просмотреть, используя только команду ls
. для того, чтобы иметь возможность просмотреть все файлы, включая скрытые, используйте флаг -a
с командой ls
следующим образом:
ls –a
Что добавлять в файл .gitignore
?
В файл .gitignore
должны быть добавлены файлы любого типа, которые не нужно фиксировать.
Вы можете не хотеть их фиксировать из соображений безопасности или потому, что они нужны только вам и не нужны другим разработчикам, работающим над тем же проектом, что и вы.
Вот некоторые файлы, которые могут быть включены:
Файлы операционной системы. Каждая операционная система, будь то macOS, Windows или Linux, создает системные скрытые файлы, которые не нужны другим разработчикам, так как их система создает такие же файлы. Например, в macOS Finder создает файл .DS_Store
, который содержит пользовательские настройки внешнего вида и отображения папок, такие как размер и положение иконок.
Файлы конфигурации, создаваемые такими приложениями, как редакторы кода и IDE (Integrated Development Environment – интегрированная среда разработки). Эти файлы настроены под вас, ваши конфигурации и ваши настройки, например папка .idea
.
Файлы, которые автоматически генерируются языком программирования или средой разработки, которую вы используете для своего проекта, и в процессе компиляции специфичных для кода файлов, такие как файлы .o
.
Папки, созданные диспетчерами пакетов, например, папка npm node_modules
. Это папка, которая используется для сохранения и отслеживания зависимостей для каждого пакета, который вы устанавливаете локально.
Файлы, которые содержат конфиденциальные данные и личную информацию. Примерами таких файлов могут послужить файлы с вашими учетными данными (имя пользователя и пароль) и файлы с переменными среды, такие как файлы .env
(файлы .env
содержат ключи API, которые должны оставаться защищенными и закрытыми).
Файлы среды выполнения, такие как файлы .log
. Они предоставляют информацию об использовании операционной системы и ошибках, а также историю событий, произошедших в рамках ОС.
Как игнорировать файл или папку в Git ?
Если вы хотите игнорировать только один конкретный файл, то вам необходимо указать полный путь к файлу из корневой папки проекта.
Например, если вы хотите игнорировать файл text.txt
, который расположен в корневом каталоге, то вы должны сделать следующее:
/text.txt
А если вы хотите игнорировать файл text.txt
, который расположен в папке test
корневого каталоге, вы должны сделать следующее:
/test/text.txt
Вы можете это записать иначе:
test/text.txt
Если вы хотите игнорировать все файлы с определенным именем, то вам нужно написать точное имя файла.
Например, если вы хотите игнорировать любые файлы text.txt
, то вы должны добавить в .gitignore
следующее:
text.txt
В таком случае вам не нужно указывать полный путь к конкретному файлу. Этот шаблон будет игнорировать все файлы с таким именем, расположенные в любой папке проекта.
Для того, чтобы игнорировать весь каталог со всем его содержимым, вам нужно указать имя каталога со слешем в конце:
test/
Эта команда позволит игнорировать любой каталог (включая другие файлы и другие подкаталоги внутри каталога) с именем test
, расположенный в любой папке вашего проекта.
Стоит отметить, что если вы напишете просто имя каталога без слеша, то этот шаблон будет соответствовать как любым файлам, так и любым каталогам с таким именем:
# соответствует любым файлам и каталогам с именем test test
Что делать, если вы хотите игнорировать любые файлы и каталоги, которые начинаются с определенного слова?
Допустим, вы хотите игнорировать все файлы и каталоги, имя которых начинается с img
. Для этого вам необходимо указать имя, а затем селектор подстановочного символа *
:
img*
Эта команда позволит игнорировать все файлы и каталоги, имя которых начинается с img
.
Но что делать, если вы хотите игнорировать любые файлы и каталоги, которые заканчиваются определенным набором символов?
Если вы хотите игнорировать все файлы с определенным расширением, то вам необходимо будет использовать селектор подстановочного знака *
, за которым последует расширение файла.
Например, если вы хотите игнорировать все файлы разметки, которые заканчиваются расширением .md
, то вы должны в файл .gitignore
добавить следующее:
*.md
Этот шаблон будет соответствовать любому файлу с расширением .md
, расположенному в любой папке проекта.
Мы разобрали, как игнорировать все файлы, которые оканчиваются одинаково. Но что делать, если вы хотите сделать исключение для одного из этих файлов?
Допустим, вы добавили в свой файл .gitignore
следующее:
.md
Этот шаблон позволит игнорировать все файлы, оканчивающиеся на .md
, но вы, например, не хотите, чтобы Git игнорировал файл README.md
.
Для этого вам нужно будет воспользоваться шаблоном с отрицанием (с восклицательным знаком), чтобы исключить файл, который в противном случае был бы проигнорирован, как и все остальные:
# игнорирует все файлы .md .md # не игнорирует файл README.md !README.md
Учитывая эти два шаблона в файле .gitignore
, все файлы, оканчивающиеся на .md
будут игнорироваться, кроме файла README.md
.
Стоит отметить, что данный шаблон не будет работать, если вы игнорируете весь каталог.
Допустим, что вы игнорируете все каталоги test
:
test/
И допустим, внутри папки test
у вас есть файл example.md
, который вы не хотите игнорировать.
В этом случае вы не сможете сделать исключение для файла внутри игнорируемого каталога следующим образом:
# игнорировать все каталоги с именем test test/ # попытка отрицания файла внутри игнорируемого каталога не сработает !test/example.md
Как игнорировать ранее закоммиченый файл
Лучше всего создать файл .gitignore
со всеми файлами и различными шаблонами файлов, которые вы хотите игнорировать, при создании нового репозитория, до его коммита.
Git может игнорировать только неотслеживаемые файлы, которые еще не были зафиксированы в репозитории.
Что же делать, если вы уже закоммитили файл, но хотели бы, чтобы он все-таки не был закоммичен?
Допустим, что вы случайно закоммитили файл .env
, в котором хранятся переменные среды.
Для начала вам необходимо обновить файл .gitignore
, чтобы включить файл .env
:
# добавить файл .env в .gitignore echo ".env" >> .gitignore
Теперь, вам нужно указать Git не отслеживать этот файл, удалив его из перечня:
git rm --cached .env
Команда git rm
вместе с параметром --cached
удаляет файл из репозитория, но не фактический файл. Это значит, что файл остается в вашей локальной системе и в вашем рабочем каталоге в качестве файла, который игнорируется.
Команда git status
покажет, что файла в репозитории больше нет, а ввод команды ls
покажет, что файл существует в вашей локальной файловой системе.
Если вы хотите удалить файл из репозитория и вашей локальной системы, то не используйте параметр --cached
.
Затем добавьте .gitignore
в область подготовленных файлов с помощью команды git add
:
git add .gitignore
И наконец, закоммитте файл .gitignore
с помощью команды git commit
:
git commit -m "update ignored files"
Вот и все – теперь вы знаете, как игнорировать файлы и папки в Git.