EnglishРусский Map

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. Для небольших репозиториев ресурсов потребуется меньше, но для крупных это инструмент не для ноутбука.