Gitignore не игнорирует файл
Обновлено: 24.11.2024
Git может игнорировать только те файлы, которые не отслеживаются — файлы, которые еще не были зафиксированы в репозитории. Вот почему при создании нового репозитория вы должны также создать файл .gitignore со всеми шаблонами файлов, которые вы хотите игнорировать.
Однако, конечно, не все идет идеально. и проскальзывают файлы, которые вы позже хотели бы игнорировать.
Шпаргалка Git
Не нужно запоминать все эти команды и параметры: получите нашу популярную «Шпаргалку по Git» — бесплатно!
Подготовка к очистке
Прежде чем очистить репозиторий, необходимо провести две важные приготовления:
- Убедитесь, что ваш файл .gitignore обновлен и содержит все правильные шаблоны, которые вы хотите игнорировать.
- Зафиксируйте или спрячьте любые незавершенные локальные изменения, которые у вас могут быть. Прежде чем продолжить, ваша рабочая копия должна быть чистой.
Как игнорировать файлы
В нашей бесплатной онлайн-книге очень подробно объясняется общий процесс игнорирования файлов.
Очистка игнорируемых файлов
За три шага вы можете очистить свой репозиторий и убедиться, что ваши игнорируемые элементы действительно игнорируются:
Игнорирование зафиксированных файлов в Tower
Если вы используете клиент Tower Git, приложение сделает всю тяжелую работу за вас: при попытке игнорировать файл, который уже отслеживается в Git, Tower спросит, хотите ли вы отменить его отслеживание, чтобы правила игнорирования могут выполнять свою работу.
Подробнее
- Прочитайте главу «Начало работы с неверсионным проектом» в нашей бесплатной онлайн-книге.
- Часто задаваемые вопросы о Git и управлении версиями
Получите нашу популярную памятку по Git бесплатно!
Самые важные команды вы найдете на лицевой стороне, а полезные советы — на обратной. Более 100 000 разработчиков скачали его, чтобы сделать Git немного проще.
О нас
Как создатели Tower, лучшего клиента Git для Mac и Windows, мы помогаем более чем 100 000 пользователей в таких компаниях, как Apple, Google, Amazon, Twitter и Ebay, получить максимальную отдачу от Git.
Как и в случае с Tower, наша миссия с этой платформой – помочь людям стать лучшими профессионалами.
Вот почему мы бесплатно предоставляем наши руководства, видеоролики и памятки (об управлении версиями в Git и многих других темах).
© Tower, 2010-2022. Упомянутые названия продуктов и логотипы являются собственностью соответствующих владельцев.
Использование файла .gitignore – лучший способ улучшить качество кода и репозиториев Git.
Изображение Mapbox Uncharted ERG, CC-BY 3.0 US
Я заметил, что многие разработчики не используют файл .gitignore, хотя рекомендуется использовать его для обозначения файлов, которые Git не должен отслеживать в системе контроля версий. Поскольку .gitignore может повысить качество вашего кода, вы не должны игнорировать .gitignore в своих репозиториях.
Что такое .gitignore?
Программирование и разработка
Файлы в вашем рабочем репозитории Git могут быть:
- Неотслеживаемые: изменения, которые не были подготовлены или зафиксированы.
- Отслеживаемые: изменения, которые были подготовлены или зафиксированы.
- Игнорируются: файлы, которые вы указываете Git игнорировать.
Есть некоторые файлы, которые Git должен игнорировать и не отслеживать в вашем репозитории. К ним относятся многие автоматически сгенерированные или специфичные для платформы файлы, а также другие локальные файлы конфигурации, такие как:
- Файлы с конфиденциальной информацией
- Скомпилированный код, например .dll или .class
- Системные файлы, такие как .DS_Store или Thumbs.db
- Файлы с временной информацией, такой как журналы, кэши и т. д.
- Созданные файлы, такие как dist папки
Если вы не хотите, чтобы Git отслеживал определенные файлы в вашем репозитории, вы не можете использовать команду Git. (Хотя вы можете остановить отслеживание файла с помощью команды git rm, например git rm --cached .) Вместо этого вам нужно использовать файл .gitignore, текстовый файл, который сообщает Git, какие файлы не отслеживать.
Создать файл .gitignore несложно; просто создайте текстовый файл и назовите его .gitignore. Не забудьте добавить одну точку ( . ) в начале имени файла. Вот и все!
Правила написания файла .gitignore
Согласно документации, «каждая строка в файле .gitignore указывает шаблон».
В этом контексте "шаблон" может относиться к определенному имени файла или к некоторой части имени файла в сочетании с подстановочным знаком. Другими словами, example.txt — это допустимый шаблон, который соответствует файлу с именем example.txt, а ex*txt — это допустимый шаблон, который соответствует файлу с именем example.txt, а также файлу с именем export.txt.
Вот несколько основных правил, которые помогут вам правильно настроить файл .gitignore:
Локальные и глобальные файлы .gitignore
Существует два типа файлов .gitignore:
- Локальный: помещается в корень репозитория Git, работает только с этим репозиторием и должен быть зафиксирован в репозитории.
- Глобальный: размещается в корневом каталоге вашего домашнего каталога, влияет на каждый репозиторий, который вы используете на своем компьютере, не требует фиксации.
Многие разработчики используют локальный файл .gitignore в репозитории своих проектов, но очень немногие используют глобальный файл .gitignore. Наиболее существенные преимущества использования глобального файла заключаются в том, что вам не нужно фиксировать его для использования, а внесение одного изменения влияет на все ваши репозитории.
Преимущества игнорирования Git
Есть и другие преимущества использования файла .gitignore помимо того, что Git не отслеживает определенные файлы:
- Помогает содержать репозиторий кода в чистоте, игнорируя ненужные файлы.
- Он позволяет контролировать размер репозитория, что особенно полезно, если вы работаете над большим проектом.
- Каждый запрос на фиксацию, отправку и получение будет чистым.
Заключение
Git мощный, но, в конце концов, это просто еще одна компьютерная программа. Использование лучших практик и поддержание стабильного репозитория кода — это коллективная работа, и часть этого заключается в использовании файла .gitignore.
Управление проектами Git с помощью подмодулей и поддеревьев
Подмодули и поддеревья помогают управлять дочерними проектами в нескольких репозиториях.
6 лучших способов управления репозиториями Git
Не поддавайтесь желанию добавить в Git элементы, которые усложнят управление; вот что делать вместо этого.
Изменившая жизнь магия git rebase -i
Заставьте всех думать, что вы пишете идеальный код с первого раза (и упростите проверку и слияние ваших исправлений).
Установка и настройка
Получение и создание проектов
Базовый снимок
Ветвление и слияние
Обмен проектами и их обновление
Осмотр и сравнение
Исправление
Отладка
Электронная почта
Внешние системы
Администратор сервера
Руководства
Администрирование
Связные команды
Проверьте свою версию 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. Другими словами, косая черта в начале не имеет значения, если в шаблоне уже есть косая черта посередине.
Читайте также: