Repositório oficial do desafio Codecon: reconstrua o Git do zero — commit, histórico e diff funcionando do zero
Este repositório reúne os projetos desenvolvidos durante o desafio de reconstruir um sistema de controle de versão minimalista inspirado no Git.
O objetivo é implementar os três pilares fundamentais do Git:
- Commit: salvar snapshots do estado atual dos arquivos
- Histórico: listar os commits realizados em ordem cronológica
- Diff: comparar dois commits e exibir o que mudou entre eles
- ⏱️ 3 horas para desenvolvimento
- 🛠️ Qualquer stack de desenvolvimento
- 💡 Criatividade livre na implementação interna
- Comando de commit que persiste o estado dos arquivos
- Listagem de histórico de commits
- Diff funcional entre dois commits (comparação linha a linha)
Acha que consegue implementar algo mais completo ou elegante? Adoraríamos ver sua versão!
- Fork este repositório
- Crie uma pasta com seu nome/username
- Desenvolva seu mini-Git
- Documente seu processo no README
- Abra um Pull Request
Seu README deve incluir:
- Stack: Tecnologias utilizadas
- Arquitetura: Como você estruturou o armazenamento dos snapshots?
- Abordagem do Diff: Qual algoritmo ou estratégia de comparação você usou?
- Resultado: Screenshots ou demo em terminal
- Aprendizados: O que funcionou? O que você mudaria?
/
├── seu-nome-aqui/ # 👈 Sua contribuição!
│ ├── src/
│ │ └── ...
│ ├── package.json # Se aplicável
│ └── README.md # Descreva seu projeto aqui!
└── README.md
- Snapshots: O Git não armazena diffs — armazena o estado completo dos arquivos a cada commit
- Hashes: Cada commit é identificado por um hash (SHA) do seu conteúdo
- DAG: O histórico de commits forma um grafo acíclico dirigido — cada commit aponta para seu pai
- Diff (Myers Algorithm): O algoritmo de Myers é a base do
git diff— encontra a menor sequência de edições entre dois textos
- Confundir snapshot com delta — Git guarda estado, não diferença
- Esquecer de persistir os dados entre execuções
- Subestimar o diff — comparar arquivos linha a linha parece simples, mas borda cases aparecem rápido
- Não tratar arquivos binários (pode ignorar no MVP)
Se quiser ir além do requisito mínimo:
- 🌿 Branches: ponteiros nomeados para commits
- 📌 HEAD: rastrear em qual estado o repositório se encontra
- 🔀 Merge simples: juntar dois históricos sem conflito
- 🏷️ Tags: marcar commits com nomes legíveis
- 📦 Compressão: armazenar objetos de forma eficiente
Gostou do desafio? Apoie a criação de mais conteúdos como este!
- 🎫 Crachá especial na Codecon Summit
- 💬 Acesso ao grupo secreto no WhatsApp/Discord
- 🎬 Acompanhe os bastidores dos eventos
- 📧 Newsletter semanal exclusiva
- 🎨 Tema da Codecon para VSCode
Assine agora em codecon.dev/pro
- Instagram - @codecondev
- YouTube - Vídeos toda semana
- Site Oficial - Todos os eventos
Este projeto está sob licença MIT. Sinta-se livre para explorar, aprender e compartilhar!
Feito com ⌨️ e muita raça pela comunidade Codecon
#Git #ControleDeVersão #Codecon #DesafioCodecon