Что должно и не должно быть в .gitignore для любого языка и IDE?

1,00
р.
Есть ли какие-либо общие закономерности о том, что в git-репозитории всегда нужно добавлять в .gitignore и что точно не стоит?
Навеяно этим вопросом: Что должно быть в gitignore для Visual Studio?

Ответ
Как правило, нужно добавлять в .gitignore
Базы данных. Для них есть свои способы бэкапирования и применять для этого git нерационально или даже опасно. Файлы, образующиеся в процессе и результате компиляции проекта. Как правило, для них отводятся папки с именами вроде target/, output/, release/, debug/. Эти файлы можно получить из исходного кода, поэтому их версионирование не имеет смысла. Разные сторонние инструменты, которые вы положили в одну папку с проектом. А еще лучше просто не хранить их в той же папке. Файлы, генерируемые тестовым фреймворком, профилировщиком, дебаггером и т.п. Сгенерированная из кода документация — только если вы не генерируете ее в отдельный репозиторий, через который потом развертываете сайт с документацией. Файлы, создаваемые при выполнении кода: журналы (*.log), результаты работы и т.п. Временные файлы вашего текстового редактора или среды разработки. Часто их имя заканчивается тильдой: *~. Файлы, создаваемые операционной системой, например thumbs.db, .DS_Store
Стоит подумать
Большие бинарные файлы. Особенно если они постоянно обновляются вне зависимости от версии кода.
Как правило, нельзя игнорировать, нужно сохранять
Все файлы конфигурации git игнорировать бессмысленно. Это сама папка .git (ее в любом случае нельзя добавить в индекс) и другие файлы: .gitattributes, .gitignore. Файлы, которые определяют структуру проекта. Как правило, они создаются средой разработки. Их потеря в лучшем случае грозит вам потерями времени на перестройку проекта в IDE, в худшем — необходимостью вручную восстанавливать связи. Собственно, код и сопутствующие ресурсы.