ћерион Ќетворкс

9 минут

Git Ц это попул€рна€ система контрол€ версий. Ѕлагодар€ Git разработчики могут сотрудничать и без проблем работать над проектами совместно.

Git позвол€ет отслеживать изменени€, которые вы вносите в проект с течением времени. ѕомимо этого, он позвол€ет вернутьс€ к предыдущей версии, если вы вдруг решили не вносить изменение.

gitignore

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.


—кидки 50% в Merion Academy

¬ыбрать курс