Repositório Git — é um armazenamento do código fonte do projeto onde o Git rastreia cada alteração de arquivos ao longo do desenvolvimento. O repositório contém o histórico completo de commits, branches e tags, permitindo que os desenvolvedores trabalhem juntos no código. De acordo com Git, 2024, o repositório é a base de qualquer sistema de controle de versão e é usado em milhões de projetos em todo o mundo.
Principais conclusões
Repositório Git — é uma estrutura de dados onde o sistema de controle de versão armazena metadados e objetos que descrevem o histórico de alterações dos arquivos do projeto. Quando um desenvolvedor inicializa um repositório com o comando git init, o Git cria uma pasta oculta .git na raiz do projeto.
Dentro desta pasta estão todos os objetos, referências e arquivos de configuração necessários para o funcionamento do sistema. O repositório não está vinculado a um local específico — o desenvolvedor pode criá-lo localmente e depois vinculá-lo a um servidor remoto.
O Git usa um modelo de repositório distribuído: cada membro do projeto tem uma cópia completa do histórico em seu computador. Isso significa que a maioria das operações — commit, visualizar histórico, criar branches — são realizadas localmente sem contactar o servidor.
De acordo com a documentação do Git, a arquitetura distribuída torna o sistema tolerante a falhas: se o servidor falhar, qualquer repositório local pode servir como fonte para restaurar o histórico completo do projeto.
Repositório local — é uma cópia do projeto no computador do desenvolvedor. Contém todo o histórico de commits, branches e tags, e permite realizar operações de commit, branch, merge e rebase sem conexão com a rede.
Repositório remoto — é hospedado em um servidor e serve como ponto de sincronização para todos os membros da equipe. Os desenvolvedores enviam suas alterações com o comando git push e recebem as alterações de outros com git pull.
A conexão entre o repositório local e o remoto é configurada através do remote origin — a URL do servidor armazenada na configuração do Git. Um repositório local pode estar vinculado a vários repositórios remotos, o que é útil ao trabalhar com forks.
A principal vantagem deste modelo é que o desenvolvedor pode trabalhar no código offline e sincronizar as alterações apenas quando estiver pronto para enviar o resultado.
| Característica | Local | Remoto |
|---|---|---|
| Localização | No computador do desenvolvedor | Em um servidor (GitHub, GitLab) |
| Acesso sem rede | Acesso completo a todas as operações | Indisponível sem conexão |
| Sincronização | Push/Pull com o remoto | Recebe push dos locais |
| Backup | Não protegido contra perda de dados | Armazenado no servidor com backups |
O modelo de armazenamento do Git é fundamentalmente diferente de outros sistemas de controle de versão. Em vez de armazenar uma lista de alterações (deltas) entre versões, o Git guarda instantâneos completos de todos os arquivos do projeto no momento de cada commit.
Cada objeto no repositório é identificado por um hash SHA-1 único de 40 caracteres. Se o conteúdo de um arquivo não mudou entre commits, o Git não cria um novo objeto, mas reutiliza o existente — isso economiza espaço.
O Git usa quatro tipos de objetos: blob (conteúdo do arquivo), tree (estrutura do diretório), commit (instantâneo com metadados) e tag (referência nomeada a um commit). Todos os objetos estão armazenados na pasta .git/objects.
De acordo com Git Internals, o modelo de objetos do Git garante a integridade dos dados: qualquer alteração no conteúdo de um arquivo gera um novo hash, tornando impossível modificar o histórico sem ser detectado.
A pasta .git é o coração do repositório. Sem ela, o Git não pode rastrear alterações, e um diretório comum permanece apenas uma coleção de arquivos. Compreender a estrutura desta pasta ajuda a diagnosticar problemas com o repositório.
O arquivo HEAD merece atenção especial. Em estado normal contém uma referência simbólica a uma branch, por exemplo ref: refs/heads/main. Em estado detached HEAD aponta diretamente para um commit — isso significa que novos commits não estarão vinculados a nenhuma branch.
Trabalhar com um repositório Git envolve um conjunto de operações básicas que o desenvolvedor realiza diariamente. Cada operação altera o estado do repositório adicionando novos objetos ou movendo referências.
As operações push e pull são as únicas que requerem conexão com o servidor remoto. Todas as outras operações são realizadas inteiramente localmente, garantindo alta velocidade mesmo com um grande volume de histórico.
Cada arquivo no repositório passa por quatro estados: untracked (não rastreado), modified (modificado), staged (preparado) e committed (confirmado). O Git rastreia apenas os arquivos que foram explicitamente adicionados via git add ou que já estão no histórico de commits.
Compreender este modelo é a chave para trabalhar eficazmente com o Git. O desenvolvedor pode preparar seletivamente apenas uma parte dos arquivos modificados para o commit, criando commits logicamente completos com uma descrição clara.
Os repositórios remotos geralmente são hospedados em plataformas especializadas que fornecem interface web, sistema de controle de acesso e ferramentas adicionais para desenvolvimento colaborativo.
A escolha da plataforma depende do tamanho da equipe, requisitos de privacidade e integrações necessárias. Para desenvolvimento móvel, GitHub é frequentemente escolhido devido ao amplo suporte da comunidade e integração com ferramentas CI/CD para iOS e Android.
Vamos considerar um cenário prático: um desenvolvedor clona um repositório existente, cria uma nova branch, faz alterações e as envia para o servidor. Cada comando demonstra o trabalho com diferentes componentes do repositório.
# Clonar um repositório remoto
git clone https://github.com/user/mobile-app.git
# Navegar para o diretório do projeto
cd mobile-app
# Criar uma nova branch feature e mudar para ela
git checkout -b feature/auth
# Verificar o estado dos arquivos modificados
git status
# Adicionar todas as alterações à área de staging
git add .
# Criar um commit com descrição
git commit -m "Add authentication module"
# Enviar alterações para o repositório remoto
git push origin feature/auth
O comando git status é um dos mais úteis no trabalho diário. Ele mostra quais arquivos foram modificados, quais estão preparados para commit e quais não são rastreados pelo Git.
Para analisar o histórico do repositório, o comando git log é usado com várias flags de formatação. Ele exibe a cronologia dos commits, seus autores, datas e identificadores SHA-1.
# Ver histórico com visualização do grafo de branches
git log --oneline --graph --all
# Ver alterações em um commit específico
git show a1b2c3d
# Comparar o estado atual com o último commit
git diff HEAD
# Ver histórico de um arquivo específico
git log --follow src/MainActivity.kt
A flag --graph exibe um gráfico ASCII das ramificações, o que é especialmente útil em repositórios com trabalho ativo em várias branches. Para projetos móveis com lançamentos frequentes, um gráfico visual ajuda a avaliar rapidamente a estrutura do desenvolvimento.
Perguntas frequentes
Um repositório é um armazenamento técnico de código com histórico de alterações. Projeto é um conceito mais amplo que inclui o repositório, sistema de gerenciamento de tarefas, documentação e processos de desenvolvimento. Um projeto pode conter vários repositórios.
Crie um novo repositório através da interface web do GitHub clicando no botão New. Especifique um nome, descrição e nível de acesso. Em seguida, clone o repositório na máquina local ou vincule-o a um repositório local existente via git remote add origin.
Se um repositório remoto foi excluído do servidor, mas pelo menos um desenvolvedor tem uma cópia local, o repositório pode ser restaurado. Basta criar um novo repositório remoto e executar git push --force da cópia local com todo o histórico.
Um fork é uma cópia de um repositório de outra pessoa na sua conta. Você obtém uma cópia completa do histórico e pode fazer qualquer alteração sem afetar o original. Forks são usados para participar de projetos open-source através de Pull Requests.
Use git gc para comprimir objetos e remover dados inacessíveis. Remova arquivos grandes do histórico através de git filter-branch ou git filter-repo. Para projetos com arquivos binários, considere Git LFS (Large File Storage).
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também