Файл gitignore содержит информацию о файлах и каталогах, которые Git должен игнорировать. В этом руководстве вы узнаете, как использовать файлы gitignore в вашем проекте Python!
Что такое Gitignore и зачем он вам нужен?
Файл в репозитории Git может быть отслеживаемым или неотслеживаемым. Отслеживаемые файлы — это файлы, о которых Git знает, все остальное — неотслеживаемое. Git не начнет отслеживать неотслеживаемые файлы, пока вы не попросите об этом.
Файл gitignore играет важную роль в явном указании файлов, которые Git должен игнорировать, и помогает избежать ошибочной отправки файлов, которые не следует отслеживать в репозитории.
Примерами файлов, которые не следует отслеживать в репозитории Git, являются файлы, содержащие конфиденциальные данные (например, пароли), файлы журналов или файлы, созданные системой сборки.
Файл gitignore состоит из обобщенных шаблонов, которые могут соответствовать широкому спектру файлов. Имя этого файла на самом деле .gitignore. Он начинается с точки (.).
Как правило, добавляйте файл. gitignore в свой репозиторий при его создании и перед началом внесения каких-либо изменений в проект.
Давайте научимся редактировать файлы .gitignore вручную и писать шаблоны gitignore.
Создание файлов gitignore с использованием Glob Patterns
Шаблоны Glob широко используются в файлах gitignore для обозначения широкого спектра возможных шаблонов для игнорирования. Если вы когда-либо работали с регулярными выражениями, вы уже знакомы с некоторыми из них.
Мы проверим эти шаблоны, разбирая их…
Создайте на своем компьютере каталог с именем git_ignore, войдите в этот каталог, а затем используйте команду git init
, чтобы добавить этот каталог под управление Git.
$ mkdir git_ignore
$ cd git_ignore
$ git init
Initialized empty Git repository in /opt/git_ignore/.git/
Давайте рассмотрим некоторые наиболее распространённые выражения подстановки:
Одним из наиболее часто используемых шаблонов gitignore является звездочка (*). Звездочка обозначает ноль или более символов (кроме слешей).
*.log
Это выражение соответствует любым файлам с расширениями .log (файлы журналов). Создайте файл .gitignore и добавьте в него указанное выше выражение.
Примечание: каждый раз, когда вы изменяете файл.gitignore, не забывайте сохранять его в своем репозитории (используйте команды git add
и git commit
).
Теперь создайте два файла .log внутри каталога репозитория:
$ touch access.log
$ mkdir var
$ touch var/access.log
Затем убедитесь, что команда git status
не отображает их, поскольку они игнорируются на основании шаблона *.log в файле .gitignore.
$ git status
On branch master
nothing to commit, working tree clean
Создайте файл, расширение которого не совпадает с .log, и убедитесь, что Git его не игнорирует:
$ touch access.out
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
access.out
nothing added to commit but untracked files present (use "git add" to track)
Другим распространенным подстановочным знаком, который можно использовать в шаблонах, является вопросительный знак, представляющий один символ:
data?.csv
Этот шаблон соответствует файлам с именами data1.csv или data2.csv, но не data12.csv, поскольку вопросительный знак представляет собой один символ.
А вот и третья распространенная закономерность…
В файлах gitignore также можно использовать числовые и буквенные диапазоны, указанные с помощью квадратных скобок.
Например, следующий шаблон соответствует data0.txt, data1.txt, …, data9.txt:
data[0-9].txt
Аналогично, приведенный ниже шаблон соответствует data_a.txt и data_b.txt.
data_[a-b].txt
Как игнорировать все файлы PYC в репозитории Git?
Распространенным требованием при работе над проектом Python является обеспечение того, чтобы любые файлы .pyc, созданные интерпретатором Python на вашей локальной машине, не были переданы в ваш репозиторий Git.
Добиться этого с помощью файла .gitignore относительно просто…
Вы можете использовать следующее выражение, похожее на то, что мы видели в предыдущем разделе:
*.pyc
Еще один пример шаблона, который вам понадобится в файле Python gitignore, — это следующий, который игнорирует каталог __pycache__
:
__pycache__/
Это начало, но это далеко не полный список того, что вам может понадобиться для вашего проекта Python.
Вот пример файла Python gitignore, который вы можете изучить для получения дополнительных идей.
Как отключить рекурсивное поведение в шаблонах gitignore
В предыдущем разделе вы видели, что шаблон *.log сопоставил файл в текущем каталоге и файл в подкаталоге var.
По умолчанию шаблоны glob применяются рекурсивно ко всей структуре каталогов. Добавьте косую черту (/) в начале шаблона gitignore, чтобы отключить рекурсивное поведение.
Обновите существующий шаблон следующим образом:
/*.log
И выполните команду git status:
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
access.out
var/
nothing added to commit but untracked files present (use "git add" to track)
После этого изменения Git отслеживает содержимое каталога var, поскольку мы больше не игнорируем файл var/access.log.
Можно ли применить шаблон gitignore ко всем подкаталогам?
Допустим, вы хотите игнорировать шаблон test_pattern123 во всех подкаталогах вашего репозитория. Вы можете использовать следующий шаблон:
**/test_pattern123
Две звездочки, за которыми следует косая черта перед шаблоном, соответствуют этому шаблону для файла или каталога во всех подкаталогах.
Это может быть полезно, если вы хотите игнорировать определенный шаблон на основе более сложных условий.
Например, предположим, что вы хотите игнорировать файлы.pyc в любом месте вашего репозитория Git, только если они находятся внутри каталога с именем test_pattern123. Вы можете использовать следующее выражение:
**/test_pattern123/*.pyc
И не волнуйтесь, если некоторые из этих шаблонов покажутся вам немного сложными!
В большинстве случаев шаблоны, которые вам нужны в файлах .gitignore, довольно просты.
Как игнорировать все файлы в каталоге с помощью файла gitignore
Шаблон gitignore для игнорирования всех файлов в каталоге — это имя каталога, за которым следует завершающий символ /**. Этот шаблон относится к расположению файла.gitignore.
Например, если имя каталога — ignore_dir, и этот каталог находится внутри каталога с именем test, шаблон будет следующим:
test/ignore_dir/**
Чтобы лучше ознакомиться с этими шаблонами, обязательно протестируйте их на своем компьютере.
Как отменить шаблон gitignore
Часто используемым шаблоном подстановки является отрицательный шаблон, обозначенный восклицательным знаком: !. Начальный восклицательный знак не игнорирует указанный шаблон.
Например, следующие две строки игнорируют data.txt, но не игнорируют data.csv.
data.*
!data.csv
Можно ли использовать пустые строки в файле .gitignore?
Пустые строки в файле gitignore не соответствуют никаким шаблонам и обычно используются для того, чтобы сделать файл gitignore более читабельным.
Также, чтобы добавить комментарий к файлу .gitignore, вы можете начать строку с символа решетки (#). Вы бы использовали комментарий, чтобы объяснить причину шаблонов, добавленных в файл gitignore с течением времени.
Как экранировать символ в файле.gitignore
Чтобы экранировать символ в файле gitignore и интерпретировать его буквально, можно использовать обратную косую черту. Например, хэш используется для комментариев, но вы можете интерпретировать его как символ внутри шаблона, экранируя его с помощью обратной косой черты.
Вот пример…
Создайте файл с именем #testfile и выполните команду git status:
$ touch #testfile
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
#testfile
nothing added to commit but untracked files present (use "git add" to track)
Как вы видите, этот новый файл отмечен как неотслеживаемый.
Теперь добавьте следующий шаблон в ваш файл .gitignore (зафиксируйте файл как обычно после внесения изменений):
\#test*
Повторно выполните команду git status
, и вы увидите, что Git больше не обнаруживает файл #testfile:
$ git status
On branch master
nothing to commit, working tree clean
Без обратной косой черты строка #test* будет интерпретироваться как комментарий в файле .gitignore.
Исключение из правила: как зафиксировать игнорируемые файлы?
Цель этого раздела — просто дать вам полное понимание того, что вы можете сделать с вашим репозиторием Git. Это не означает, что вы должны обходить шаблоны .gitignore.
В большинстве случаев существует причина, по которой эти шаблоны были добавлены в файл .gitignore для вашего репозитория (если только шаблон не был непреднамеренно неверным).
Предположим, у вас есть следующий шаблон в файле gitignore, и вы хотите зафиксировать файл sample.html в своем репозитории.
*.html
Вот что произойдет, если вы попытаетесь это инсценировать:
$ git add sample.html
The following paths are ignored by one of your.gitignore files:
sample.html
Use -f if you really want to add them.
Git сообщает вам, что этот файл игнорируется, чтобы вы не совершили ошибку.
В выводе git add
вы также можете увидеть, что можно передать флаг -f
, если вы хотите подготовить этот файл.
Давайте попробуем (опять же… не рекомендуется!)
$ git add -f sample.html
$ git commit -m "sample.html added despite gitignore pattern"
Лучшим вариантом было бы использовать шаблон отрицания, который мы видели в одном из предыдущих разделов:
*.html
!sample.html
Заключение
Файлы git .gitignore широко используются, и они важны для Git, поскольку позволяют ему знать, какие файлы следует игнорировать, чтобы вы могли поддерживать чистоту и безопасность своих репозиториев.
В этом руководстве вы изучили основы файлов и шаблонов gitignore и теперь готовы использовать файлы gitignore в своих проектах Python.