Git – это популярная система контроля версий. Благодаря Git разработчики могут сотрудничать и без проблем работать над проектами совместно.
Git позволяет отслеживать изменения, которые вы вносите в проект с течением времени. Помимо этого, он позволяет вернуться к предыдущей версии, если вы вдруг решили не вносить изменение.
Git работает по следующему принципу: вы размещаете файлы в проекте с помощью команды git add
, а затем фиксируете (коммитите) их с помощью команды git commit
.
При совместной работе над проектами могут возникнуть ситуации, когда вы не захотите, чтобы какие-то файлы или части проекта были видны всем участникам команды.
Иными словами, вы не захотите включать и фиксировать эти файлы в основной версии проекта. Вот почему вы можете не захотеть использовать разделитель (точку) с командой git add
, так как в этом случае каждый отдельный файл будет размещен в текущем каталоге Git.
Когда вы используете команду git commit
, то каждый отдельный файл фиксируется – это также добавляет файлы, которые не нужно.
Вы можете, наоборот, захотеть, чтобы Git игнорировал определенные файлы, но для такой цели не существует команды git ignore.
Итак, как же сделать так, чтобы Git игнорировал и не отслеживал определенные файлы? С помощью файла .gitignore
.
В этой статье вы узнаете, что такое файл .gitignore
, как его создать и как использовать для игнорирования некоторых файлов и папок. Также вы узнаете, как можно заставить Git игнорировать уже закоммиченый файл.
Что такое файл .gitignore? Для чего он нужен?
Каждый из файлов в любом текущем рабочем репозитории Git относится к одному из трех типов:
- Отслеживаемые – это все файлы и каталоги, о которых знает Git. Это файлы и каталоги, которые были недавно размещены (добавлены с помощью
git add
) и зафиксированы (закоммичены с помощьюgit commit
) в главном репозитории. - Неотслеживаемые – это новые файлы и каталоги, которые созданы в рабочем каталоге, но еще не размещены (или добавлены с помощью команды
git add
). - Игнорируемые – это все файлы и каталоги, которые полностью исключаются и игнорируются, и никто о них в репозитории Git не знает. По сути, это способ сообщить Git о том, какие неотслеживаемые файлы так и должны остаться неотслеживаемыми и не должны фиксироваться.
Все файлы, которые должны быть проигнорированы, сохраняются в файле .gitignore
.
Файл .gitignore
– это обычный текстовый файл, который содержит список всех указанных файлов и папок проекта, которые Git должен игнорировать и не отслеживать.
Внутри файла .gitignore
вы можете указать Git игнорировать только один файл или одну папку, указав имя или шаблон этого конкретного файла или папки. Используя такой же подход, вы можете указать 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.