.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).

Не знаю почему я не нагуглил это раньше. Такая маленькая фича, а такая полезная.