pgit
- title
- pgit
- type
- toolbox
- summary
- Импортирует историю git-репозитория в PostgreSQL, позволяя делать SQL-запросы к коммитам и версиям файлов
- tags
- golang, git, postgresql, data-analysis
- language
- Go
- license
- Unknown
- created
- 2026-04-09
- updated
- 2026-04-09
- lang
- ru
- translation_of
- pgit
- source_updated
- 2026-04-09
- translated
- 2026-09-01
- translator
- lllm/antigravity/gemini-3.7-flash-medium
Git-подобный CLI, который импортирует git-репозитории в PostgreSQL, делая всю историю доступной для SQL-запросов. Построен на базе pg-xpatch - собственного Table Access Method для PostgreSQL, хранящего данные с дельта-сжатием.
pgit не заменяет git в повседневной работе с контролем версий. Его ценность в аналитике: как только репозиторий попадает в Postgres, к коммитам, версиям файлов, путям и blob'ам можно применять произвольные SQL-запросы. Запросы связности файлов (file coupling), анализ участников, отслеживание изменений кода (churn), полнотекстовый поиск по сообщениям коммитов - то, для чего раньше требовались хрупкие скрипты поверх git log, превращается в обычные join'ы и агрегации.
Как это устроено
pgit обходит граф объектов git и записывает коммиты, blob'ы, ссылки на файлы и пути в таблицы PostgreSQL. Текстовое и бинарное содержимое проходит через xpatch (Rust-библиотека дельта-сжатия с биндингами для нескольких языков), что обеспечивает компактность хранилища. Декомпозиция в стиле multiEntry означает, что каждая версия файла в каждом коммите - это отдельная строка в таблице ссылок на файлы, которая и составляет основной объём.
Для ядра Linux (1,4 млн коммитов, 24,4 млн версий файлов) импорт занимает ~2 часа, а данные занимают 2,7 ГБ - степень сжатия в 53,5 раза по сравнению с исходными объектами. Полный анализ см. в linux-kernel-pgit.
Использование
go install github.com/imgajeed76/pgit/v4/cmd/pgit@latest
# Import a repository
pgit import /path/to/repo
# Query with psql
psql -d pgit -c "SELECT author, COUNT(*) FROM commits GROUP BY author ORDER BY 2 DESC LIMIT 10"
Связанные компоненты
- pg-xpatch - Table Access Method для PostgreSQL, обеспечивающий хранение с дельта-сжатием
- xpatch - лежащая в основе библиотека дельта-сжатия (Rust, с биндингами для Python/Node.js/C/WASM)
Ограничения
Требуется экземпляр PostgreSQL с установленным расширением pg-xpatch. Импорт активно расходует процессор и память: для импорта ядра Linux использовалась машина с 24 ядрами и 512 ГБ RAM. Для небольших репозиториев ресурсов потребуется меньше, но для крупных это инструмент не для ноутбука.