GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - DevComputaria/gitdatabase: GitDatabase é uma engine de análise de repositórios Git que converte código, commits e estruturas de projeto em dados consultáveis

BranchesTags
Open more actions menu

Latest commit

 

History

25 Commits
25 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
crates
crates
 
 
docker
docker
 
 
docs
docs
 
 
migrations
migrations
 
 
.dockerignore
.dockerignore
 
 
.gitignore
.gitignore
 
 
.pre-commit-config.yaml
.pre-commit-config.yaml
 
 
CHANGELOG.md
CHANGELOG.md
 
 
Cargo.lock
Cargo.lock
 
 
Cargo.toml
Cargo.toml
 
 
Dockerfile
Dockerfile
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
SECURITY.md
SECURITY.md
 
 
mkdocs.yml
mkdocs.yml
 
 
requirements-docs.txt
requirements-docs.txt
 
 

Repository files navigation

GitDatabase

GitDatabase é uma solução que indexa repositórios Git e expõe os dados em PostgreSQL para consultas analíticas e de busca. Ele fornece:

  • Sync de metadados Git (repositórios, refs, commits, arquivos, árvores)
  • Hidratação de blobs (conteúdo textual dos arquivos)
  • Busca de código com search_code(pattern, lang)
  • (Opcional) UAST para análises semânticas
  • Acesso via pgwire/psql para consultas SQL

Este repositório é um workspace Rust com múltiplos crates (CLI, DB, loader e pgwire).


Estrutura do projeto

  • crates/gitbase-cli — CLI principal (sync, search-index, hydrate-blobs, uast, serve)
  • crates/gitbase-db — acesso ao PostgreSQL e migrations
  • crates/gitbase-loader — ingestão e hidratação de dados Git
  • crates/gitbase-pgwire — servidor pgwire (porta padrão 5433)
  • migrations/ — schema do banco
  • docker/docker-compose.yml — Postgres local

Pré-requisitos

  • Rust (Cargo)
  • Docker + docker-compose
  • PostgreSQL client (psql)

Pre-commit (fmt + clippy)

Este repositório inclui hooks via pre-commit para rodar cargo fmt e cargo clippy antes de commitar e antes de fazer push.

Instalação

Instale o pre-commit (exemplos):

  • pipx install pre-commit
  • pip install --user pre-commit
  • brew install pre-commit

Depois, ative os hooks:

  • pre-commit install --hook-type pre-commit --hook-type pre-push

Para rodar manualmente em todos os arquivos:

  • pre-commit run --all-files

Subindo o Postgres (Docker)

cd docker
docker-compose up -d

A conexão padrão é:

  • Host: 127.0.0.1
  • Porta: 5433
  • Banco: gitbase
  • Usuário: gitbase
  • Senha: gitbase

Variáveis de ambiente

  • DATABASE_URL=postgres://gitbase:[email protected]:5433/gitbase
  • GITBASE_REPO_ROOTS=/caminho/para/repos

Uso rápido (CLI)

1) Sincronizar repositórios

DATABASE_URL=postgres://gitbase:[email protected]:5433/gitbase \
  cargo run -p gitbase-cli -- sync --repo-roots /caminho/para/repos

2) Hidratar conteúdo dos arquivos (blobs)

Isso preenche gitbase.blobs.content, necessário para busca de conteúdo e indexação.

DATABASE_URL=postgres://gitbase:[email protected]:5433/gitbase \
  cargo run -p gitbase-cli -- hydrate-blobs --repo-roots /caminho/para/repos

Opcional: limitar com --limit via GITBASE_BLOB_HYDRATE_LIMIT.

3) Criar índice de busca

DATABASE_URL=postgres://gitbase:[email protected]:5433/gitbase \
  cargo run -p gitbase-cli -- search-index

Acesso via psql

psql "postgres://gitbase:[email protected]:5433/gitbase"

Se o prompt aparecer como gitbase-#, use \r para limpar o comando pendente.


Consultas úteis

Esquemas e tabelas

SELECT schema_name FROM information_schema.schemata ORDER BY schema_name;
SELECT table_schema, table_name
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
ORDER BY table_schema, table_name;
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'gitbase'
  AND table_type = 'BASE TABLE'
ORDER BY table_name;

Listar arquivos (distintos)

SELECT DISTINCT
  r.name AS repository,
  f.path,
  f.language,
  f.size,
  f.is_binary
FROM gitbase.files f
JOIN gitbase.repositories r ON r.id = f.repository_id
ORDER BY r.name, f.path
LIMIT 200;

Buscar commits por autor

SELECT
  c.hash,
  c.author_name,
  c.author_email,
  c.committed_at,
  c.message,
  r.name AS repository
FROM gitbase.commits c
JOIN gitbase.repositories r ON r.id = c.repository_id
WHERE c.author_email = 'email@dominio'
ORDER BY c.committed_at DESC
LIMIT 100;

Buscar uso de biblioteca (search_code)

SELECT
  r.name AS repository,
  s.path,
  s.commit_hash,
  s.language,
  s.score
FROM gitbase.search_code('MimeKit') s
JOIN gitbase.repositories r ON r.id = s.repository_id
ORDER BY s.score DESC
LIMIT 200;

Ver conteúdo de arquivo (texto + hex na mesma query)

SELECT DISTINCT ON (f.path)
  f.path,
  encode(b.content, 'hex') AS content_hex,
  convert_from(b.content, 'UTF8') AS content_text
FROM gitbase.files f
JOIN gitbase.blobs b ON b.hash = f.blob_hash
JOIN gitbase.commits c
  ON c.repository_id = f.repository_id
 AND c.hash = f.commit_hash
WHERE f.path = 'backend/src/CertificateManager.Core/Entities/User.cs'
ORDER BY f.path, c.committed_at DESC
LIMIT 1;

Troubleshooting

  • search_code retornando 0 linhas
    • Rode hydrate-blobs e depois search-index.
  • ERROR: invalid byte sequence for encoding "UTF8": 0x00
    • O índice ignora NUL bytes e normaliza o conteúdo automaticamente.
  • Repetição de arquivos
    • gitbase.files guarda arquivos por commit. Use DISTINCT se quiser um por caminho.

Teste de integração em containers

O teste de integração sobe um PostgreSQL isolado, clona DevComputaria/DevComputaria.Prompting, executa sync, hydrate-blobs e search-index, e valida o resultado com consultas SQL.

mkdir -p test-results
docker compose -f docker/docker-compose.integration-test.yml up \
  --build \
  --abort-on-container-exit \
  --exit-code-from integration-test \
  integration-test
docker compose -f docker/docker-compose.integration-test.yml down --volumes

O resultado detalhado é exibido no console e gravado em test-results/container-integration-test.md. O workflow Container integration test também publica esse relatório no Job Summary e como artefato da execução.


Documentação (MkDocs)

Este repositório possui documentação versionada em docs/ com publicação automática para gh-pages via GitHub Actions.

Conteúdo técnico principal:

  • Visão geral de arquitetura
  • Contexto e componentes
  • Pipelines e consistência
  • Atributos de qualidade
  • Modelo de dados
  • Plano de funcionalidades ausentes
  • Changelog

Rodar localmente

python -m pip install --upgrade pip
pip install mkdocs mkdocs-material
mkdocs serve

Depois acesse http://127.0.0.1:8000.

Publicação automática

  • Workflow: .github/workflows/docs-gh-pages.yml
  • Dispara em push para main quando houver alterações em docs/** ou mkdocs.yml
  • Publica no branch gh-pages usando mkdocs gh-deploy

Se for a primeira publicação, confirme em Settings → Pages que o site usa o branch gh-pages.


Licença

Consulte o arquivo de licença do projeto (se aplicável).

About

GitDatabase é uma engine de análise de repositórios Git que converte código, commits e estruturas de projeto em dados consultáveis

devcomputaria.github.io/gitdatabase/

Resources

Readme
MIT license

Code of conduct

Code of conduct

Contributing

Contributing

Security policy

Security policy
Activity
Custom properties

Stars

0 stars

Watchers

0 watching

Forks

0 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.