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

117

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

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

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

Ян Хантер
источник
Связанный: stackoverflow.com/questions/12144633/…
krlmlr

Ответы:

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

kenorb
источник
5
Это намного лучше, чем принятый ответ. Без обид, но это спасло мне день. Спасибо, кенорб.
luanjunyi
1
Заслуживает большего количества голосов. Выяснилось, что какой-то странный gitignore в некоторых папках / vendor / вызывал проблемы с последней версией git.
Мануэль Арвед Шмидт
2
этот спас меня сегодня ... похоже, что визуальная студия создала файл с именем gitignore_global.txt в папке с документами пользователей, и это игнорировало файлы, которые я не мог (отменить) игнорировать
Самуэль
1
Отлично решил мою проблему. Некоторые узоры не так просто уловить на глаз !!
Willa
54

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

git config core.excludesfile

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

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

gabrielf
источник
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 в вашем репо. Эти правила не связаны с репо, поэтому они не передаются другим. Этот метод можно использовать для локально сгенерированных файлов, которые вы не ожидаете от других пользователей, например файлов, созданных вашим редактором.

gahooa
источник
В репозитории нет других файлов .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 снова начал отслеживать мой каталог.

Shevaun
источник
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/
jwogrady
источник
1

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

Maharlikans
источник
0

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

viviansteller
источник
0

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

*
!.gitignore

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

jfoliveira
источник