Для чего нужен файл gitignore

Обновлено: 21.11.2024

Я только что создал репозиторий Github, и мне было интересно, для чего нужен файл .gitignore. Я начал с того, что не создал его, а добавил, потому что он есть в большинстве репозиториев. Нужно ли мне иметь один? Могу ли я просто игнорировать это, или это имеет смысл? Я провел некоторое исследование по этому вопросу, но не смог найти конкретного объяснения.

5 ответов 5

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

Вы можете найти полную информацию здесь.

Что означает игнорировать? Кто/что/когда игнорирует? Я знаю, что означает слово «игнорировать», но не нахожу четкого описания того, что означает «игнорировать» в контексте Git. Очевидно, что этот термин полностью понятен людям, которые его понимают, но все, что написано для определения чего-либо для людей, которые этого еще не знают, должно объяснять все термины, определения которых уникальны для данного контекста.

@user34660 Ignore означает именно это — Git не будет отслеживать изменения в файлах, указанных (шаблонами) в файле .gitignore. Даже если вы измените их, git не покажет их как измененные.

Тогда что значит отслеживать? Вы должны понимать, что новичок может не знать, применяется ли отслеживание до/после коммита, до/после нажатия или к чему-то еще. Термины, которые имеют значение только в соответствующем контексте, должны быть определены/объяснены. Я отправил проект на GitHub и получил несколько файлов, которые, как мне казалось, не должны быть отправлены. Я не прошу помощи в этом, за исключением того, что это поможет мне быть уверенным в том, что должно произойти, чтобы я мог быть уверен, что то, что произошло, не должно было произойти (что-то сломано), поэтому я знаю, что мне нужно это исправить.

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

Скажем, вы работаете на Mac и у вас есть файлы .DS_Store во всех ваших каталогах. Вы хотите, чтобы git их игнорировал, поэтому добавляете .DS_Store в качестве строки в .gitignore. И так далее.

Я знаю, что опаздываю на эту тему, но спасибо, @AndyLester! Я новичок в программировании и Github. Я нахожу, что многие из ответов, написанных для решения этого типа вопросов, заполнены терминами, которые новичок может не понять (например, продукты компиляции, временные файлы, которые создают IDE. Что, черт возьми, это за вещи!). Однако описание вашего Mac идеально в своей элегантной простоте!

Когда вы делаете фиксацию, вы не хотите случайно включать временные файлы или создавать определенные папки. Следовательно, используйте .gitignore со списком элементов, которые вы хотите игнорировать при фиксации.

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

Вы бы хотели, чтобы ваш список статусов git не содержал ненужных файлов. Например, я изменил a.cpp, b.cpp, c.cpp, d.cpp и e.cpp. Я хочу, чтобы мой статус git отображал следующее:

Я не хочу, чтобы git status отображал измененные файлы, подобные этому, с промежуточными объектными файлами и файлами из папки сборки

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

Вот мой .gitignore, чтобы избежать фиксации ненужных файлов

Файл .gitignore — это текстовый файл, который сообщает Git, какие файлы или папки следует игнорировать в проекте.

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

Чтобы создать локальный файл .gitignore, создайте текстовый файл и назовите его .gitignore (не забудьте включить . в начале). Затем отредактируйте этот файл по мере необходимости. В каждой новой строке должен быть указан дополнительный файл или папка, которые вы хотите игнорировать Git.

Записи в этом файле также могут соответствовать шаблону соответствия.

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

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

Это создаст файл ~/.gitignore_global . Теперь вы можете редактировать этот файл так же, как локальный файл .gitignore. Все ваши репозитории Git будут игнорировать файлы и папки, перечисленные в глобальном файле .gitignore.

Как отменить отслеживание файлов, ранее зафиксированных в новом Gitignore

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

git rm --кэшированное имя файла

Чтобы отменить отслеживание каждого файла в .gitignore:

Сначала зафиксируйте все незавершенные изменения кода, а затем запустите:

git rm -r --cached

Это удалит все измененные файлы из индекса (области подготовки), затем запустите:

git commit -m ".gitignore теперь работает"

Чтобы отменить git rm --cached имя файла, используйте git add имя файла

Дополнительная информация:

  • Документация по Git: gitignore
  • Игнорирование файлов: GitHub
  • Полезные шаблоны .gitignore: GitHub

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

Научитесь программировать бесплатно. Учебная программа freeCodeCamp с открытым исходным кодом помогла более чем 40 000 человек получить работу в качестве разработчиков. Начать

freeCodeCamp – это поддерживаемая донорами некоммерческая организация, освобожденная от налогов в соответствии со статьей 501(c)(3) (идентификационный номер федерального налогоплательщика США: 82-0779546)

Наша миссия: помочь людям научиться программировать бесплатно. Мы достигаем этого, создавая тысячи видеороликов, статей и интерактивных уроков по кодированию — все они находятся в свободном доступе. У нас также есть тысячи учебных групп freeCodeCamp по всему миру.

Пожертвования в пользу freeCodeCamp идут на наши образовательные инициативы и помогают оплачивать серверы, услуги и персонал.

Установка и настройка

Получение и создание проектов

Базовый снимок

Ветвление и слияние

Обмен проектами и их обновление

Осмотр и сравнение

Исправление

Отладка

Электронная почта

Внешние системы

Администратор сервера

Руководства

Администрирование

Связные команды

Проверьте свою версию git, запустив

gitignore — указывает намеренно неотслеживаемые файлы, которые следует игнорировать

ОБЗОР

$XDG_CONFIG_HOME/git/ignore, $GIT_DIR/info/exclude, .gitignore

ОПИСАНИЕ

Файл gitignore указывает намеренно неотслеживаемые файлы, которые Git должен игнорировать. Файлы, уже отслеженные Git, не затрагиваются; подробности см. в ПРИМЕЧАНИЯХ ниже.

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

Шаблоны считываются из командной строки для тех команд, которые их поддерживают.

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

Шаблоны считываются из $GIT_DIR/info/exclude .

Шаблоны считываются из файла, указанного в переменной конфигурации core.excludesFile .

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

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

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

Шаблоны, которые пользователь хочет, чтобы Git игнорировал во всех ситуациях (например, резервные копии или временные файлы, созданные выбранным пользователем редактором), обычно помещаются в файл, указанный в параметре core.excludesFile в ~/.gitconfig пользователя. Его значение по умолчанию — $XDG_CONFIG_HOME/git/ignore. Если $XDG_CONFIG_HOME не задан или пуст, вместо него используется $HOME/.config/git/ignore.

Основные инструменты подключения Git, такие как git ls-files и git read-tree, считывают шаблоны gitignore, заданные параметрами командной строки, или из файлов, заданных параметры командной строки. Инструменты Git более высокого уровня, такие как git status и git add, используют шаблоны из указанных выше источников.

ФОРМАТ ШАБЛОНА

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

Конечные пробелы игнорируются, если только они не заключены в кавычки с обратной косой чертой ("\").

Необязательный префикс "!", отрицающий шаблон; любой соответствующий файл, исключенный предыдущим шаблоном, будет снова включен. Невозможно повторно включить файл, если исключен родительский каталог этого файла. Git не перечисляет исключенные каталоги из соображений производительности, поэтому любые шаблоны для содержащихся файлов не действуют, независимо от того, где они определены. Поместите обратную косую черту ("\") перед первым "!" для шаблонов, начинающихся с буквального "!", например, "\!important!.txt".

Слэш / используется в качестве разделителя каталогов. Разделители могут встречаться в начале, середине или конце шаблона поиска .gitignore.

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

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

Например, шаблон doc/frotz/ соответствует каталогу doc/frotz, но не каталогу/doc/frotz; однако frotz/ соответствует fritz и a/frotz, который является каталогом (все пути указаны относительно файла .gitignore).

Звездочка "*" соответствует чему угодно, кроме косой черты. Символ «?» соответствует любому одному символу, кроме «/». Обозначение диапазона, например. [a-zA-Z] может использоваться для соответствия одному из символов в диапазоне. См. более подробное описание в fnmatch(3) и флаге FNM_PATHNAME.

Две последовательные звездочки ("**") в шаблонах, совпадающих с полным путем, могут иметь особое значение:

Начальный символ "**", за которым следует косая черта, означает совпадение во всех каталогах. Например, «**/foo» соответствует файлу или каталогу «foo» в любом месте, так же, как шаблон «foo». "**/foo/bar" соответствует файлу или каталогу "bar" в любом месте, которое находится непосредственно в каталоге "foo".

Конечный "/**" соответствует всему внутри. Например, "abc/**" соответствует всем файлам внутри каталога "abc" относительно местоположения файла .gitignore с бесконечной глубиной.

Косая черта, за которой следуют две последовательные звездочки, после чего косая черта соответствует нулю или более каталогам. Например, "a/**/b" соответствует "a/b", "a/x/b", "a/x/y/b" и т. д.

Другие последовательные звездочки считаются обычными звездочками и будут совпадать в соответствии с предыдущими правилами.

КОНФИГУРАЦИЯ

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

ПРИМЕЧАНИЯ

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

Чтобы остановить отслеживание файла, который в данный момент отслеживается, используйте git rm --cached.

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

ПРИМЕРЫ

Шаблон hello.* соответствует любому файлу или каталогу, имя которого начинается с приветствия. . Если кто-то хочет ограничить это только каталогом, а не его подкаталогами, можно добавить перед шаблоном косую черту, то есть /hello.* ; шаблон теперь соответствует hello.txt, hello.c, но не соответствует a/hello.java.

Шаблон foo/ будет соответствовать каталогу foo и путям под ним, но не будет соответствовать обычному файлу или символической ссылке foo (это согласуется с тем, как pathspec работает в Git в целом)

Шаблоны doc/frotz и /doc/frotz имеют одинаковый эффект в любом файле .gitignore. Другими словами, косая черта в начале не имеет значения, если в шаблоне уже есть косая черта посередине.

Шаблон "foo/*" соответствует "foo/test.json" (обычный файл), "foo/bar" (каталог), но не соответствует "foo/bar/hello.c" ( обычный файл), так как звездочка в шаблоне не соответствует «bar/hello.c», в котором есть косая черта.

Энтони Хеддингс

Энтони Хеддингс
Писатель

Энтони Хеддингс (Anthony Heddings) – штатный облачный инженер LifeSavvy Media, технический писатель, программист и эксперт по платформе Amazon AWS. Он написал сотни статей для How-To Geek и CloudSavvy IT, которые были прочитаны миллионы раз. Подробнее.

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

В чем смысл .gitignore?

В большинстве проектов существует разница между кодом/конфигурацией и сгенерированными файлами из этого кода или конфигурации. Последнее обычно бесполезно, и его обычно можно игнорировать.

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

Это широкое определение, поэтому давайте рассмотрим пример. В проектах Node JS есть папка с именем node_modules, которая содержит все внешние пакеты, необходимые для запуска вашего кода. Вы можете удалить этот каталог и полностью перестроить его, запустив npm install , который использует конфигурацию package.json для поиска пакетов.

Так какой смысл иметь папку node_modules в Git? На самом деле его нет, так как он более сложный, может вызвать проблемы и во многих случаях даже значительно увеличить размер репозитория Git.

Если вы проигнорируете весь каталог, все ваши коллеги все равно смогут создать свою собственную локальную копию из файла package.json. Поэтому вместо этого в Git следует отслеживать только package.json. Большинство вещей, которые добавляются в .gitignore, следуют этому шаблону. Артефакты сборки, такие как папка ./bin/, не фиксируются, поскольку являются прямым результатом самого кода.

Другие вещи также могут быть добавлены в .gitignore для удобства. MacOS генерирует системные файлы с именем .DS_store , которые вы всегда можете игнорировать. Возможно, вы храните ключи API в .env/, которые вы не хотите отслеживать в системе контроля версий, вы также можете добавить их. Кэши, журналы и другие выходные данные обычно можно игнорировать.

Использование .gitignore

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

  • * подстановочные знаки, которые соответствуют любому тексту и могут использоваться для сопоставления с любым каталогом или любым файлом независимо от расширения.
  • ! , который работает как своего рода белый список, который сводит на нет ранее исключенный файл. Основная загвоздка в том, что он заносит в белый список файл только в том случае, если он был напрямую исключен, и не будет работать с файлами в каталогах, которые были полностью исключены.
  • ** , который рекурсивно сопоставляет что угодно с каталогами. Например, **/*.json будет соответствовать любому файлу JSON независимо от того, где он находится, а src/** будет рекурсивно соответствовать каждому файлу в папке. Это полезно, если вы хотите внести в белый список, а не игнорировать весь каталог.

Например, gitignore Node JS может выглядеть следующим образом:

Добавление файлов в белый список с ! может быть очень полезным для многих конфигураций. Например, в одном из моих проектов у меня был инструмент под названием steamcmd, который загружает зависимости для игровых серверов из Steam. Этот инструмент упакован в один переносимый исполняемый файл, но он производит много мусора, который я не хочу отслеживать в Git.

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

gitignore также использует некоторые другие шаблоны подстановки Unix для сопоставления строк, такие как вопросительный знак для сопоставления одного символа или [a-z], которые будут соответствовать наборам символов.

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

Если у вас возникли проблемы с конфигурацией .gitignore, вы можете отладить ее с помощью команды Git check-ignore:

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

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

Если вы все равно хотите установить его, вы можете сделать это с помощью следующей команды:

Принудительное сохранение или сохранение игнорируемых файлов

Принудительная фиксация обычно является плохой идеей. Возможно, вам следует добавить белый список для этого конкретного файла, поскольку после фиксации обновления этого файла не будут отслеживаться. Но если вы хотите что-то закоммитить вручную, вы можете запустить git add с параметром --force:

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

  • › Как развернуть веб-сервер Caddy с помощью Docker
  • › CloudFoundry или Kubernetes: какую облачную платформу выбрать?
  • › Как использовать Docker для упаковки приложений CLI
  • › Как развернуть сервер GitLab с помощью Docker
  • › Что нового в TypeScript 4.6?
  • › Что будет в React 18?

Вышеупомянутая статья может содержать партнерские ссылки, которые помогают поддерживать CloudSavvy IT.

Вы можете настроить Git так, чтобы он игнорировал файлы, которые вы не хотите возвращать на GitHub.

Настройка игнорируемых файлов для одного репозитория

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

GitHub поддерживает официальный список рекомендуемых файлов .gitignore для многих популярных операционных систем, сред и языков в общедоступном репозитории github/gitignore. Вы также можете использовать gitignore.io для создания файла .gitignore для вашей операционной системы, языка программирования или IDE. Для получения дополнительной информации см. «github/gitignore» и сайт «gitignore.io».

Открыть Терминал Терминал Git Bash.

Перейдите к местоположению вашего репозитория Git.

Создайте файл .gitignore для своего репозитория.

Если команда выполнена успешно, вывода не будет.

Пример файла .gitignore см. в разделе "Некоторые распространенные конфигурации .gitignore" в репозитории Octocat.

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

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

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

  1. Откройте Терминал Terminal Git Bash.
  2. Настройте Git для использования файла исключения ~/.gitignore_global для всех репозиториев Git.

Исключение локальных файлов без создания файла .gitignore

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

Используйте свой любимый текстовый редактор, чтобы открыть файл с именем .git/info/exclude в корне репозитория Git. Любое правило, которое вы добавите сюда, не будет проверено и будет игнорировать только файлы для вашего локального репозитория.

Читайте также: