Skip to content

Repository files navigation

GitGM (GitGM) 🚀

License: MIT Platform: Windows | Linux | macOS Security: GnuPG AES-256 Tests: Pytest 100%

Seu "GitHub Pessoal" Criptografado sobre o Google Drive. Armazene seus repositórios Git de forma 100% privada, segura e automatizada utilizando Git Bundles e criptografia simétrica OpenPGP (AES-256).


📌 Visão Geral e Arquitetura

O GitGM elimina a necessidade de serviços em nuvem de terceiros (como GitHub, GitLab ou Bitbucket) para projetos pessoais de baixa e média frequência de push.

Fluxo de Funcionamento:

  ┌───────────────────────────┐
  │     Workspace Local       │  (Sua pasta de trabalho: c:\Users\...\Develop\meu-app)
  │ (git commit & git push)   │
  └─────────────┬─────────────┘
                │ git push origin main
                ▼
  ┌───────────────────────────┐
  │  Servidor Bare Local      │  (~/.gitgm/remotes/meu-app.git)
  │ (Executa o post-receive)  │
  └─────────────┬─────────────┘
                │ Hook cria o bundle, criptografa e audita
                ▼
  ┌───────────────────────────┐
  │  Google Drive ("Cloud")   │  (G:/Meu Drive/gitgm-cloud/meu-app/)
  │   ├── meu-app.bundle.gpg  │  <-- Bundle criptografado (AES-256)
  │   ├── audit.log           │  <-- Histórico de SHA-256 e timestamps
  │   └── metadata.json       │  <-- Metadados leves de leitura rápida
  └───────────────────────────┘
  1. Workspace Local: Pasta onde você edita o código. Seu remote origin aponta para o Bare local.
  2. Servidor Bare Local: Atua como o servidor Git na sua máquina (~/.gitgm/remotes/<repo>.git).
  3. Hook post-receive: Ao executar git push, o hook intercepta a atualização, gera um Git Bundle binário contendo todo o histórico, criptografa com GPG AES-256 e grava na subpasta dedicada do Google Drive. Se o backup falhar, o git push retorna erro imediatamente.
  4. Google Drive ("Cloud"): Mantém os bundles versionados e sincronizados em nuvem.

🛠 Pré-requisitos

1. Ferramentas de Sistema

  • Git (Git for Windows com Git Bash):
    winget install --id Git.Git -e
    # ou via Chocolatey: choco install git
    # ou via Scoop: scoop install git
  • GnuPG (gpg) (Opcional se desativar a criptografia; nativo no Git Bash ou instalável via):
    winget install --id GnuPG.GnuPG -e
    # ou via Chocolatey: choco install gpg4win
    # ou via Scoop: scoop install gpg
  • Google Drive for Desktop (montado como unidade G:, D: ou pasta sincronizada local):
    winget install --id Google.GoogleDrive -e

2. Para Execução de Testes Automatizados (Opcional)

  • Python 3.8+:
    pip install -r tests/requirements.txt

📦 Instalação e Configuração

1. Instalação Automática (Nível de Usuário - Sem privilégios de Admin)

Basta executar o instalador no seu terminal:

No Windows (PowerShell):

.\install.ps1

O instalador copia o GitGM para %LOCALAPPDATA%\Programs\gitgm, adiciona automaticamente ao PATH do usuário e registra o alias git gm.

No Linux / macOS / Git Bash:

./install.sh

2. Executar o Assistente de Configuração

Se você não executou o setup durante o instalador, execute a qualquer momento:

gitgm setup
# ou
git gm setup

O assistente interativo guiará você com perguntas claras:

  • Cloud Dir: Diretório de backup no Google Drive (Padrão: G:/Meu Drive/gitgm-cloud)
  • Remotes Dir: Diretório de servidores bare locais (Padrão: ~/.gitgm/remotes)
  • Criptografia GnuPG: Escolha se deseja ativar a criptografia (S) ou salvar como .bundle direto (N).
  • Arquivo de Senha: Se a criptografia estiver ativada, escolha entre salvar a senha em arquivo local para automação silenciosa (S) ou não ter arquivo de senha (N), digitando a senha no GnuPG (prompt/pinentry) a cada operação de push/clone.

Opções de Linha de Comando no Setup:

# Setup padrão com criptografia e arquivo de senha automático:
gitgm setup

# Setup sem criptografia (salva .bundle direto no Google Drive, sem exigir GPG):
gitgm setup --no-encrypt

# Setup com criptografia ativada porém sem arquivo de senha (solicita no GnuPG toda vez):
gitgm setup --encrypt --no-pass-file

# Setup não interativo para scripts:
gitgm setup --cloud-dir "D:/Meu Drive/gitgm-cloud" --non-interactive

💻 Guia de Comandos e Exemplos de Uso

🚀 Inicializar um Novo Repositório (gitgm init)

Na pasta do seu projeto:

cd c:\Users\guime\Develop\meu-projeto
gitgm init

O GitGM criará o Bare local, instalará o hook de backup, vinculará o remote origin e fará o primeiro push de sincronização.


📥 Clonar / Restaurar um Repositório do Cloud (gitgm clone)

Para restaurar um projeto existente a partir do Google Drive:

gitgm clone financas
# ou especificando a pasta de destino:
gitgm clone financas ./minhas-financas

O GitGM baixa o bundle criptografado, valida sua integridade, recria o Bare local com o hook e clona a pasta de trabalho.


📋 Listar Repositórios e Status (gitgm list / gitgm ls)

Visualize todos os repositórios gerenciados, presença local/nuvem e tamanho:

gitgm list

Exemplo de saída:

=== Repositórios Gerenciados pelo GitGM ===
REPOSITÓRIO            | LOCAL   | CLOUD   | TAMANHO    | ÚLTIMO BACKUP       | MENSAGEM / COMMIT
-----------------------+---------+---------+------------+---------------------+------------------------------
financas               | sim     | sim     | 1.2 MB     | 2026-08-22 10:30:15 | [8a3f12c] feat: relatorios
backend-api            | sim     | sim     | 450.0 KB   | 2026-08-21 18:45:00 | [3b1901a] fix: auth token
gitgm                  | sim     | sim     | 85.0 KB    | 2026-08-22 10:40:00 | [a4d87e1] chore: init gitgm

Também suporta saída JSON para scripts:

gitgm list --json

🔍 Status Detalhado (gitgm status)

Compara os commits do Workspace, do Bare local e do Backup no Cloud:

gitgm status meu-projeto

🛡 Validação de Integridade (gitgm verify)

Verifica se os bundles na nuvem estão íntegros (valida SHA-256 e teste de decodificação GPG):

# Verifica um repositório:
gitgm verify meu-projeto

# Verifica todos os repositórios do Cloud:
gitgm verify --all

📜 Consultar Log de Auditoria (gitgm audit)

Exibe o histórico de pushes, hashes SHA-256 e datas de backup de um repositório:

gitgm audit meu-projeto
gitgm audit meu-projeto -n 50

🔑 Gerenciamento de Senhas e Re-criptografia (gitgm passwd e gitgm keygen)

  • Gerar nova senha inicial:

    gitgm keygen
    # ou com senha digitada manualmente:
    gitgm keygen --custom
  • Atualizar senha existente e re-criptografar todos os backups:

    gitgm passwd --reencrypt-all

    O GitGM descriptografa cada bundle antigo com a senha anterior, re-criptografa com a nova senha, atualiza os hashes SHA-256 no audit.log e salva o novo arquivo de chave.


🗑 Exclusão e Limpeza de Repositórios (gitgm delete / gitgm rm)

Remove repositórios que não são mais necessários com confirmação de segurança:

# Remove o Bare local e o backup no Cloud:
gitgm delete projeto-antigo

# Remove apenas o backup da nuvem:
gitgm delete projeto-antigo --cloud-only

# Força a exclusão sem perguntar confirmação:
gitgm delete projeto-antigo --force

⚙ Visualizar e Alterar Configurações (gitgm config)

# Listar configurações ativas:
gitgm config list

# Habilitar ou desabilitar a criptografia:
gitgm config set encryption false

# Habilitar ou desabilitar uso do arquivo de senha:
gitgm config set use-pass-file false

# Alterar o diretório do Google Drive:
gitgm config set cloud-dir "G:/Meu Drive/gitgm-cloud"

# Consultar uma chave específica:
gitgm config get encryption
gitgm config get remotes-dir

🧪 Suíte de Testes Automatizados (Pytest)

A suíte de testes em Python valida profundamente todas as operações em um ambiente sandbox isolado:

  • Geração de chaves e permissões de segurança.
  • Integridade binária do Git Bundle e descriptografia GPG.
  • Verificação do hash SHA-256 no audit.log e do metadata.json.
  • Restauração completa de histórico Git no gitgm clone.
  • Troca de chaves com re-criptografia (passwd --reencrypt-all).
  • Interceptação de falhas e bloqueio de push com alertas em caso de erro.
  • Fluxos completos com e sem criptografia e com e sem arquivo de senha.

Como Executar os Testes:

  1. Instale as dependências de teste:

    pip install -r tests/requirements.txt
  2. Execute o Pytest diretamente:

    pytest
    # ou
    python -m pytest

🚨 Guia de Recuperação de Desastres (Disaster Recovery)

Se você formatar o computador ou mudar de máquina:

  1. Instale o Git for Windows e o Google Drive for Desktop.
  2. Restaure seu arquivo de senha passphrase em ~/.gitgm/passphrase (ou tenha a senha guardada em seu gerenciador de senhas).
  3. Clone o projeto GitGM ou adicione-o ao PATH.
  4. Execute gitgm setup para apontar para a pasta do Google Drive.
  5. Restaure qualquer projeto com um único comando:
    gitgm clone meu-projeto

Pronto! Seu servidor Bare local será reconstruído, os hooks reativados e o projeto estará pronto para novos commits e pushes.


🔒 Segurança e Privacidade

  • Criptografia Simétrica: AES-256 via GnuPG.
  • Proteção da Passphrase: Permissão de leitura restrita (chmod 600) armazenada isoladamente em ~/.gitgm/passphrase.
  • Prevenção de Falhas: Escrita atômica em arquivos temporários locais antes da sincronização no Google Drive para evitar bloqueios de arquivo do Windows (File Lock).
  • Sem Conexões Externas: Seus dados trafegam exclusivamente entre o seu computador e o seu próprio Google Drive.

📄 Licença

Distribuído sob a licença MIT. Consulte o arquivo LICENSE para mais detalhes.

About

Seu "GitHub Pessoal" privado e criptografado (AES-256/GnuPG) com backup automático no Google Drive via Git Bundles.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages