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).
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.
┌───────────────────────────┐
│ 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
└───────────────────────────┘
- Workspace Local: Pasta onde você edita o código. Seu remote
originaponta para o Bare local. - Servidor Bare Local: Atua como o servidor Git na sua máquina (
~/.gitgm/remotes/<repo>.git). - Hook
post-receive: Ao executargit 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, ogit pushretorna erro imediatamente. - Google Drive ("Cloud"): Mantém os bundles versionados e sincronizados em nuvem.
- 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
- Python 3.8+:
pip install -r tests/requirements.txt
Basta executar o instalador no seu terminal:
No Windows (PowerShell):
.\install.ps1O 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.shSe você não executou o setup durante o instalador, execute a qualquer momento:
gitgm setup
# ou
git gm setupO 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.bundledireto (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.
# 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-interactiveNa pasta do seu projeto:
cd c:\Users\guime\Develop\meu-projeto
gitgm initO GitGM criará o Bare local, instalará o hook de backup, vinculará o remote origin e fará o primeiro push de sincronização.
Para restaurar um projeto existente a partir do Google Drive:
gitgm clone financas
# ou especificando a pasta de destino:
gitgm clone financas ./minhas-financasO GitGM baixa o bundle criptografado, valida sua integridade, recria o Bare local com o hook e clona a pasta de trabalho.
Visualize todos os repositórios gerenciados, presença local/nuvem e tamanho:
gitgm listExemplo 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 --jsonCompara os commits do Workspace, do Bare local e do Backup no Cloud:
gitgm status meu-projetoVerifica 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 --allExibe 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-
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.loge salva o novo arquivo de chave.
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# 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-dirA 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.loge dometadata.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.
-
Instale as dependências de teste:
pip install -r tests/requirements.txt
-
Execute o Pytest diretamente:
pytest # ou python -m pytest
Se você formatar o computador ou mudar de máquina:
- Instale o Git for Windows e o Google Drive for Desktop.
- Restaure seu arquivo de senha
passphraseem~/.gitgm/passphrase(ou tenha a senha guardada em seu gerenciador de senhas). - Clone o projeto GitGM ou adicione-o ao
PATH. - Execute
gitgm setuppara apontar para a pasta do Google Drive. - 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.
- 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.
Distribuído sob a licença MIT. Consulte o arquivo LICENSE para mais detalhes.