.git/info/exclude — личный .gitignore, который не уезжает в репу
Знакомая боль: пробуешь у себя в проекте новый инструмент - и каждый раз git status шумит этими файлами, рискуешь случайно закоммитить лишнего. У меня там и .cursor, и agent.md от Codex, и claude.md от клода, и много чего еще... С codegraph еще и его папка появилась.
В проектный .gitignore это добавлять нежелательно. Если каждый раз туда добавлять всё больше и больше - он превратится в огромную свалку. Плюс в больших проектах пока твой .ginignore разойдется по develop/main - пройдет вечность, которую ты будешь страдать.
А оказывается, у git ровно для этого есть встроенная штука — .git/info/exclude.
Это файл внутри .git/, синтаксис как у .gitignore, но он:
- не коммитится (живёт в .git/, а .git/ сам по себе не версионируется);
- виден только тебе;
- работает в этом конкретном клоне репозитория.
Пример. Открываешь .git/info/exclude и пишешь туда что угодно:
Всё - git status чист, ничего случайно не уедет в PR.
Бонус: есть глобальный игнор на все репы
Если те же файлы засоряют тебе вообще все проекты - можно настроить глобально:
git config --global core.excludesFile ~/.gitignore_global
В этот файл кладём универсальные паттерны (CLAUDE.md, .idea/, .DS_Store).
Не знаю почему я не нагуглил это раньше. Такая маленькая фича, а такая полезная.