ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 31 марта, 2025
Сегодня у нас 1 праздник:
Международный День Резервного Копирования (World Backup Day). Пользователи сайта социальных новостей reddit предложили сделать дату 31.03 Международным днём резервного копирования, аргументируя это тем, что никогда заранее нельзя узнать, какие сюрпризы преподнесёт 1.04

Игнорирование файлов и каталогов в Git (.gitignore)

Как добавить Git Remote

Часто при работе над проектом, использующим Git, вы хотите исключить передачу определенных файлов или каталогов в удаленный репозиторий.

Файл .gitignore определяет, какие файлы неотслеживаемого Git следует игнорировать.

 

Игнорируемые файлы — это, как правило, специфичные для платформы файлы или автоматически созданные файлы из систем сборки. Некоторые общие примеры включают в себя:

 

Файл .gitignore представляет собой обычный текстовый файл, в котором каждая строка содержит шаблон для файлов или каталогов игнорировать.

.gitignore использует шаблоны с подстановкой для сопоставления имен файлов с подстановочными знаками. Если у вас есть файлы или каталоги, содержащие шаблон подстановки, вы можете использовать одну обратную косую черту (\) для экранирования символа.

 

Строки, начинающиеся с хэш-метки (#), являются комментариями и игнорируются. Пустые строки можно использовать для улучшения читаемости файла и группировки связанных строк шаблонов.

 

Символ косой черты (/) представляет разделитель каталогов. Косая черта в начале шаблона относится к каталогу, в котором находится .gitignore.

Если шаблон начинается с косой черты, он сопоставляет файлы и каталоги только в корне хранилища.

Если шаблон не начинается с косой черты, он сопоставляет файлы и каталоги в любом каталоге или подкаталоге.

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

 

Литеральные имена файлов

Самый простой шаблон — это буквальное имя файла без каких-либо специальных символов.

Шаблон Пример совпадений
/access.log access.log
access.log access.log
logs/access.log
var/logs/access.log
build/ build

Символы подстановки

* — Символ звездочки соответствует нулю или более символов.

Шаблон Пример совпадений
*.log error.log
logs/debug.log
build/logs/error.log

**- Два соседних символа звездочки соответствуют любому файлу или нуля или более каталогов. Когда за ним следует косая черта ( /), он соответствует только каталогам.

Шаблон Пример совпадений
logs/** Совпадает с чем угодно внутри каталога logs.
**/build var/build
pub/build
build
foo/**/bar foo/bar
foo/a/bar
foo/a/b/c/bar

? — Знак вопроса соответствует любому отдельному символу.

Шаблон Пример совпадений
access?.log access0.log
access1.log
accessA.log
foo?? fooab
foo23
foo0s

[…] — Соответствует любому из символов, заключенных в квадратные скобки. Когда два символа разделены дефисом, -это обозначает диапазон символов. Диапазон включает в себя все символы, которые находятся между этими двумя символами. Диапазоны могут быть буквенными или числовыми.

Если первый символ, следующий за символом [восклицательного знака ( !), соответствует шаблону любому символу, кроме символов из указанного набора.

Шаблон Пример совпадений
*.[oa] file.o
file.a
*.[!oa] file.s
file.1
file.0
access.[0-2].log access.0.log
access.1.log
access.2.log
file.[a-c].out file.a.out
file.b.out
file.c.out
file.[a-cx-z].out file.a.out
file.b.out
file.c.out
file.x.out
file.y.out
file.z.out
access.[!0-2].log access.3.log
access.4.log
access.Q.log

Отрицательные образцы

Шаблон, который начинается с восклицательного знака (!), отменяет (повторно включает) любой файл, который игнорируется предыдущим шаблоном. Исключением из этого правила является повторное включение файла, если исключен его родительский каталог.

Шаблон Пример совпадений
*.log
!error.log
error.log или logs/error.log не будет проигнорирован

Ниже приведен пример того, как ваш файл .gitignore может выглядеть:

# Ignore the node_modules directory
node_modules/

# Ignore Logs
logs
*.log

# Ignore the build directory
/dist

# The file containing environment variables 
.env

# Ignore IDE specific files
.idea/
.vscode/
*.sw*

 

Локальный .gitignore

Локальный файл .gitignore обычно помещается в корневой каталог репозитория. Однако вы можете создать несколько файлов .gitignore в разных подкаталогах в вашем хранилище. Шаблоны в файлах .gitignore сопоставляются относительно каталога, в котором находится файл.

Шаблоны, определенные в файлах, которые находятся в каталогах (подкаталогах) более низкого уровня, имеют приоритет над шаблонами в каталогах более высокого уровня.

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

 

Правила личного игнорирования

Шаблоны, которые являются специфическими для вашего локального хранилища и не должны распространяться на другие хранилища, должны быть установлены в файле .git/info/exclude.

Например, вы можете использовать этот файл для игнорирования сгенерированных файлов из ваших личных инструментов проекта.

 

Глобальный .gitignore

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

Файл может быть назван как угодно и храниться в любом месте. Наиболее распространенным местом для хранения этого файла является домашний каталог. Вам придется вручную создать файл и настроить Git для его использования.

Например, чтобы установить ~/.gitignore_global в качестве глобального файла игнорирования Git, вы должны сделать следующее:

  1. Создайте файл:
    touch ~/.gitignore_global
    
  2. Добавьте файл в конфигурацию Git:
    git config --global core.excludesfile ~/.gitignore_global
    
  3. Откройте файл в текстовом редакторе и добавьте в него свои правила.

Глобальные правила особенно полезны для игнорирования определенных файлов, которые вы никогда не хотите зафиксировать, таких как файлы с конфиденциальной информацией или скомпилированные исполняемые файлы.

 

Игнорирование ранее зафиксированных файлов

Файлы в вашей рабочей копии могут быть отслежены или не отслежены.

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

git rm --cached filename

Опция —cached говорит мерзавцу , чтобы не удалить файл из рабочего дерева , но только, чтобы удалить его из индекса.

Чтобы рекурсивно удалить каталог, используйте параметр -r:

git rm --cached filename

Если вы хотите удалить файл как из индекса, так и из локальной файловой системы, опустите опцию —cached.

При рекурсивном удалении файлов используйте опцию -n, которая выполнит «пробный запуск» и покажет вам, какие файлы будут удалены:

git rm -r -n directory

 

Файл отладки  .gitignore

Иногда бывает сложно определить, почему конкретный файл игнорируется, особенно когда вы используете несколько файлов .gitignore или сложные шаблоны. Вот тут-то и пригодится команда git check-ignore с опцией -v, которая говорит git отображать подробности о соответствующем шаблоне.

Например, чтобы проверить, почему файл www/yarn.lock игнорируется, вы должны выполнить:

git check-ignore -v www/yarn.lock

 

 

Выходные данные показывают путь к файлу gitignore, номер совпадающей строки и фактический шаблон.

www/.gitignore:31:/yarn.lock	www/yarn.lock

 

 

Команда также принимает более одного имени файла в качестве аргументов, и файл не обязательно должен существовать в вашем рабочем дереве.

Отображение всех игнорируемых файлов

Команда git statusс параметром —ignored отображает список всех игнорируемых файлов:

git status --ignored

 

 

 

Заключение

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

gitignore.io — это онлайн-сервис, позволяющий создавать файлы .gitignore для вашей операционной системы, языка программирования или IDE.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Exit mobile version