Entendendo Git — Parte 2 — Uma abordagem prática
Durante esse mês temos abordado, em uma pequena série de textos, um dos sistemas de controle de versão mais utilizados nos dias atuais, o Git. No primeiro texto abordamos o funcionamento de um controle de versão e as origens do Git. Hoje veremos uma abordagem prática desta ferramenta e alguns comandos que podem nos ajudar no dia a dia em nossos projetos. Curioso para saber mais? então continue a leitura.
Como vimos anteriormente, Git é um sistema de controle de versão distribuído, que permite com que várias pessoas trabalhem com o mesmo conjunto de arquivos. Além disso, Git é capaz de mapear cada alteração feita em um determinado arquivo e assim gravar um registro para que seu estado possa ser recuperado quando necessário.
Para entendermos como o Git gerência esses arquivos e como podemos utiliza-lo, é necessário analisar o ciclo de vida dos status de um arquivo no Git
Ciclo de vida dos Status
Cada arquivo alterado em um projeto, é mapeada pelo Git e recebe um status diferente, de acordo com o progresso de seu desenvolvimento. Para realizar este mapeamento, o Git estrutura um snapshot do repositório local, uma espécie de registro do repositório em um determinado momento no tempo.
Basicamente nesse snapshot, temos dois status para os arquivos, “Monitorados”(Tracked) e “Não monitorados” (Untracked). Arquivos monitorados são aqueles que estavam no ultimo snapshot registrado. Já os arquivos não monitorados são todos os arquivos que não estão presentes no ultimo snapshot — todos os demais arquivos do projeto. Para adicionar um arquivo ao monitoramento basta utilizar o comando “git add”, que inclui os arquivos não monitorados ao status Tracked.
Conforme os arquivos passam por alterações, o Git começa a vê-los como “Modificados” (Modified) e “Não modificados” (Unmodified). Nesse ponto, podemos usar o comando “git commit”, para salvar os arquivos no repositório, obtendo assim, um registro do estado desses arquivos. Logo após, o ciclo se inicia novamente.
Comandos e dicas
Até o momento já aprendemos como é o funcionamento do Git, e vimos os comandos básicos para operá-lo. Mas em diversas situações podemos utilizar outros comandos que são úteis em nosso dia a dia.
“git log” e “git reset”
O comando git log, nos permite ver um histórico dos commits presentes em nosso repositório. Cada commit efetuado recebe um identificador único que pode ser utilizado para voltar o repositório para o estado das alterações presentes em um determinado arquivo.
“git stash”
Em algumas ocasiões é necessário salvar o que estamos fazendo para realizar alguma outra atividade, talvez atualizar nosso repositório local com o remoto. Para esses casos podemos contar com o comando “git stash” , que salva as modificações locais e reverte a area de trabalho para o estado de um “commit” anterior. As modificações salvas podem ser listadas com o comando “git stash list” e podem ser restauradas utilizando o comando “git stash apply”.
“git bisect”
Este comando torna o git uma ótima ferramenta para debugar os arquivos de um projeto. Imagine que um erro foi encontrado em um projeto e não conseguimos identificar com clareza onde este erro foi inserido. Por meio deste comando podemos encontrar o commit em que o erro começou e assim fazer as modificações necessárias.
Para isto, basta informar qual o ultimo commit estável e o commit mais recente do projeto. Com essas informações o Git faz uma busca binária e assim pode nos ajudar a encontrar a origem do problema.
No próximo e último texto da série, iremos estudar sobre estratégias de ramificação e sobre o git flow, um modo de uso de ramificações sugerido pelo Git. Gostou do texto? compartilhe e comente sobre suas experiências com essa fantástica ferramenta. Até a próxima!