Полный цикл в digital

Файл gitignore

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

Мы конечно могли бы вручную добавлять нужные файлы в репозиторий, например так:

git add path/to/file

Однако это было бы очень трудоемко, гораздо проще использовать команду которая добавит все файлы в каталоге проекта:

git add .

Но что если нам не нужны абсолютно все файлы, а есть файлы например в каталоге /cache или /images или /runtime проекта, которые генерируются в процессе работы. Они не должны быть добавлены в репозиторий.

Тут нам и нужен .gitignore. Вам нужно его самим создать и разместить в корне проекта либо нужной подпапке.

Где должен находиться этот файл

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

Примеры содержимого .gitignore файла:

# Игнорировать каталог в любом месте
node_modules/

# Игнорировать файлы логов в любом месте
*.log

# Игнорировать каталог в корне
/dist

# Игнорировать файл с окончанием
.env

Построение шаблонов

Символ #

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

Без символов

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

access.log  # Примеры совпадений: access.log и logs/access.log и var/logs/access.log

Символ /

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

/access.log  # Примеры совпадений: 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.[ac].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 не будут проигнорированы

Примеры шаблонов

Шаблон Примеры соответствия Пояснение*
**/logs logs/debug.log

logs/monday/foo.bar

build/logs/debug.log
Добавьте в начало шаблона две звездочки, чтобы сопоставлять каталоги в любом месте репозитория.
**/logs/debug.log logs/debug.log

build/logs/debug.log

только не:

logs/build/debug.log
Две звездочки можно также использовать для сопоставления файлов на основе их имени и имени родительского каталога.
*.log debug.log

foo.log

.log

logs/debug.log
Одна звездочка — это подстановочный знак, который может соответствовать как нескольким символам, так и ни одному.
*.log !important.log debug.log

trace.log

только не:

important.log

только не:

logs/important.log
Добавление восклицательного знака в начало шаблона отменяет действие шаблона. Если файл соответствует некоему шаблону, но при этом также соответствует отменяющему шаблону, указанному после, такой файл не будет игнорироваться.
.log !important/.log trace.* debug.log

important/trace.log

только не:

important/debug.log
Шаблоны, указанные после отменяющего шаблона, снова будут помечать файлы как игнорируемые, даже если ранее игнорирование этих файлов было отменено.
/debug.log debug.log

только не:

logs/debug.log
Косая черта перед именем файла соответствует файлу в корневом каталоге репозитория.
debug.log debug.log

logs/debug.log
По умолчанию шаблоны соответствуют файлам, находящимся в любом каталоге
debug?.log debug0.log

debugg.log

только не:

debug10.log
Знак вопроса соответствует строго одному символу.
debug[0-9].log debug0.log

debug1.log

только не:

debug10.log
Квадратные скобки можно также использовать для указания соответствия одному символу из заданного диапазона.
debug[01].log debug0.log

debug1.log

только не:

debug2.log

только не:

debug01.log
Квадратные скобки соответствуют одному символу из указанного набора.
debug[!01].log debug2.log

только не:

debug0.log

только не:

debug1.log

только не:

debug01.log
Восклицательный знак можно использовать для указания соответствия любому символу, кроме символов из указанного набора.
debug[a-z].log debuga.log

debugb.log

только не:

debug1.log
Диапазоны могут быть цифровыми или буквенными.
logs logs

logs/debug.log

logs/latest/foo.bar

build/logs

build/logs/debug.log
Без косой черты в конце этот шаблон будет соответствовать и файлам, и содержимому каталогов с таким именем. В примере соответствия слева игнорируются и каталоги, и файлы с именем logs
logs/ logs/debug.log

logs/latest/foo.bar

build/logs/foo.bar

build/logs/latest/debug.log
Косая черта в конце шаблона означает каталог. Все содержимое любого каталога репозитория, соответствующего этому имени (включая все его файлы и подкаталоги), будет игнорироваться
logs/**/debug.log logs/debug.log

logs/monday/debug.log

logs/monday/pm/debug.log
Две звездочки соответствуют множеству каталогов или ни одному.
logs/*day/debug.log logs/monday/debug.log

logs/tuesday/debug.log

только не:

logs/latest/debug.log
Подстановочные символы можно использовать и в именах каталогов.
logs/debug.log logs/debug.log

только не:

debug.log

только не:

build/logs/debug.log
Шаблоны, указывающие на файл в определенном каталоге, задаются относительно корневого каталога репозитория. (При желании можно добавить в начало косую черту, но она ни на что особо не повлияет.)

Файлы из gitignore уже добавлены в репозиторий

Обратите внимание, что если файлы уже добавлены в git репозиторий, то добавление их в .gitignore не удалит эти файлы. Изменения в них будут продолжать отслеживаться и входить в коммиты, несмотря на то, что они есть в .gitignore. Нам придется вручную их удалить из репозитория.

Команда bash, которая удалит из git репозитория те файлы, которые содержатся в файлах .gitignore. При выполнении этой команды, файлы останутся у вас на диске, однако из репозитория они будут удалены:

git rm --cached `git ls-files -i --exclude-from=.gitignore`

Либо можно удалять файлы вручную, таким образом:

git rm --cached path/to/file

Если нужно удалить целую директорию из git, то воспользуемся следующей командой:

git rm  -r --cached path/to/directory

Параметр --cached означает, что файлы будут удалены только из раздела проиндексированных файлов. На диске, в рабочем каталоге они останутся нетронутыми.

Как понять почему игнорируется конкретный файл

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

git check-ignore -v path/to/file

Отобразить все игнорируемые файлы:

git status --ignored

Очистить проект от всех игнорируемых файлов:

git clean -fX

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг