Git игнорирует файлы, которых нет в gitignore


117

У меня есть репозиторий git, который игнорирует файлы изображений, а также несколько других файлов, но в моем .gitignoreфайле он игнорирует только config.phpфайл. Есть ли где-то глобальный файл игнорирования, который я не могу найти? Мне нужно указать файлы, чтобы добавить их сейчас, и это дает мне такое предупреждение:

Следующие пути игнорируются одним из ваших файлов .gitignore.

Содержимое моего ~/.gitconfigфайла - это только мой адрес электронной почты.


Ответы:


198

git check-ignore

Используйте git check-ignoreкоманду для отладки файла gitignore (исключите файлы).

Например:

$ git check-ignore -v config.php
.gitignore:2:src    config.php

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

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

Возвращаемый формат:

<source> <COLON> <linenum> <COLON> <pattern> <HT> <pathname>

Или используйте следующую команду, чтобы распечатать домашнюю домашнюю страницу .gitignoreпользователя и папку репозитория:

cat ~/.gitignore "$(git rev-parse --show-toplevel)"/.gitignore "$(git rev-parse --show-toplevel)"/.git/info/exclude

В качестве альтернативы используйте, git add -fкоторый позволяет добавлять файлы, игнорируемые в противном случае.

См .: man gitignore, man git-check-ignoreдля более подробной информации.

Синтаксис

git check-ignore [параметры] путь…

git check-ignore [параметры] --stdin


5
Это намного лучше, чем принятый ответ. Без обид, но это спасло мне день. Спасибо, кенорб.
— luanjunyi

1
Заслуживает большего количества голосов. Выяснилось, что какой-то странный gitignore в некоторых папках / vendor / вызывал проблемы с последней версией git.
— Мануэль Арвед Шмидт

2
этот спас меня сегодня ... похоже, что визуальная студия создала файл с именем gitignore_global.txt в папке с документами пользователей, и это игнорировало файлы, которые я не мог (отменить) игнорировать
— Самуэль

1
Отлично решил мою проблему. Некоторые узоры не так просто уловить на глаз !!
— Willa

54

Было бы неплохо знать, что ваша конфигурация git может содержать файл core.excludesfile, который представляет собой путь к файлу с дополнительными шаблонами, которые игнорируются. Вы можете узнать, есть ли у вас такая конфигурация, запустив (в проблемном репозитории git):

git config core.excludesfile

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

В моем случае я установил git через старую версию boxen, которая игнорировала шаблон «Значок?» который в моем случае дал мне предупреждение, упомянутое в этом вопросе, для значков папок (я использую файловую систему без учета регистра, поэтому Icon? соответствует значкам).


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

2
Спасибо, вы сэкономили мне часы чистой агонии. В моем случае это была установка дерева исходных текстов (инструмент визуализации репозитория git), который нелогично создал в папке с документами файл gitignore_global.txt, который включал множество исключений.
— Mechanical Object

Меня это чертовски Icon?игнорировали.
— Джастин Скилс

Так было со мной. В глобальном файле игнорирования было довольно много правил. Спасибо за подсказку +1
— Madness

У меня был * .json в моем глобальном игноре - поговорим о кошмаре - спасибо!
— Джейсон Перфетто

31

Проверьте это:

  1. Вы искали другие файлы .gitignore, так как их может быть много.

  2. Также посмотрите REPO / .git / config, чтобы узнать, есть ли там что-нибудь.

  3. Repo exclude Локальные правила для каждого репо можно добавить в файл .git / info / exclude в вашем репо. Эти правила не связаны с репо, поэтому они не передаются другим. Этот метод можно использовать для локально сгенерированных файлов, которые вы не ожидаете от других пользователей, например файлов, созданных вашим редактором.


В репозитории нет других файлов .gitignore, и в файле .git / config нет ничего, что игнорирует. Как настроен .git / info / exclude?
— Ян Хантер,

4
Непонятно, почему этот ответ помечен как ответ. Как именно был решен этот вопрос?
— Next Developer

исключить была моя проблема. Я знал, что есть еще один способ игнорировать, который я использовал в прошлом, но забыл, где он находится!
— Чаки

22

У меня была такая же проблема - каталог игнорировался git с этой ошибкой:

➭ git add app/views/admin/tags/
The following paths are ignored by one of your .gitignore files:
app/views/admin/tags
Use -f if you really want to add them.
fatal: no files added

Я наконец понял, что моя проблема была в строке в моем ~/.gitignore_global:

TAGS

который соответствовал пути app/views/admin/tags. Я исправил это, добавив ведущую косую черту в глобальный файл gitignore

/TAGS

и git снова начал отслеживать мой каталог.


3
+1 за то, что заставил меня искать частичные совпадения ... gitignore_global.txt содержал "[Rr] elease * /", из-за чего мой каталог "releasenotes" игнорировался.
— Trev

Чтобы усложнить задачу, git будет игнорировать только недавно добавленные файлы, а не те, которые уже находятся в репозитории. Поэтому, когда я добавил "foo /" в свой .gitignore, он игнорировал только недавно добавленные файлы в подкаталогах foo, а не все файлы. Мне потребовался час, чтобы понять, почему одни файлы игнорируются, а другие нет.
— ccleve

У меня та же проблема. SourceTree устанавливает файл ~ / .gitignore_global в меню «Инструменты» -> элемент «Параметры» -> вкладка Git. После того, как я очистил поле Global Ignore list, команда «git add ...» заработала.
— Кейт

Я была такая же проблема. У меня был helpкаталог, который игнорировался. К счастью, я довольно быстро нашел ваш ответ.
— Абдул Садик Ялчин

9

Для меня у меня случайно был подстановочный знак в моем файле ~ / .gitignore_global. Может там проверить?


1
Это было для меня проблемой. У меня там был * .png, не знаю, как он туда попал.
— Shahar

3

Еще одна вещь, которую стоит попробовать: у меня был каталог B с собственным .gitрепозиторием, вложенным в каталог моего проекта A (но не как подмодуль). Я внес некоторые изменения в B и хотел сделать из него полноценный подмодуль. Я считаю, что git A автоматически игнорировал B, потому что он содержал свой собственный репозиторий (см. Вложенные репозитории git без подмодулей? ). Я переименовал папку B и попытался клонировать ее снова как подмодуль, и это принесло мне вводящее в заблуждение сообщение об ошибке «ignored by .gitignore». Решением было удалить .gitиз B.


2

У меня была такая же проблема, как и у вас. В единственном ответе вы указали несколько мест для проверки, но ни одно из них не решило проблему для меня, и, судя по вашему комментарию, я тоже не думаю, что за вас. У меня не было ДРУГИХ файлов .gitignore, скрывающихся ниже в дереве каталогов; ничего в .git / config; ничего в .git / ingore / exclude

Если проблема не исчезла, проверьте этот ответ . Это решило проблему для меня

По сути, проверьте файл ~ / .gitignore. Мой назывался ~ / .gitignore_global. Я не знаю, когда он был создан ( я, конечно, не сделал этого), но я попробовал множество различных настроек git при первой установке, поэтому один из них, должно быть, поместил его туда.

Надеюсь, его ответ тоже поможет вам!


1

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

Если git commitвместо этого вы выполните команду , хотя ни одно из условий не изменилось ( git submodule addбудет продолжать кричать, что .gitignoreвиноваты ваши файлы), вместо этого вы увидите другой отчет об ошибке:

$ git commit -a
fatal: Unable to create '..../.git/index.lock': File exists.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.

и действительно удаление файла блокировки:

rm .git/index.lock

решает проблему. (Это происходит с git версии 2.1.0.9736. Это может быть исправлено в будущих выпусках git.)


Спасибо, это оказалось проблемой, с которой я столкнулся. Спасатель жизни!
— JDawgg

1

Убедитесь, что у вас есть разрешение на доступ к папке. Я только что столкнулся с этим, и это произошло потому, что папка принадлежала пользователю www-data, а не пользователю, под которым я вошел в терминал.


1

В моем случае проблема была вызвана косой чертой на моем пути ...

Не работает

/srv/bootstrap/

работай

srv/bootstrap/

1

Еще одна вещь: если каталог, в котором вы находитесь, требует root-доступа для записи или выполнения, убедитесь, что вы используете root-пользователь. На самом деле у меня возникла странная ошибка, когда я пытался добавить подмодуль, а git продолжал жаловаться, что путь, по которому я клонировал, игнорируется файлом игнорирования git. Затем я перешел на пользователя root, снова запустил добавление подмодуля, и проблем не было.


0

Также проверьте, ~/.gitignoreи ~/.gitignore_globalкоторые могут быть созданы некоторыми клиентами Git (например, Atlassian SourceTree в Mac OS X).


0

Убедитесь, что .gitignoreфайл не игнорирует сам себя. Распространенной ошибкой является добавление *к .gitignoreфайлу правила игнорировать каждый файл в текущей папке. Чтобы решить эту проблему, добавьте исключение .gitignore:

*
!.gitignore

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.