Sumário
- Instalação
- Versionamento de código
- Conceitos básicos
- Comandos GIT
- Configurando seu perfil no GIT
- Fazendo o primeiro Commit
Instalação
Antes de começarmos a falar sobre o GIT em si, devo deixar claro que não irei abordar a instalação dessa ferramenta aqui, isso vai depender do seu sistema operacional e como deseja instalar, entretanto vou deixar aqui um passo a passo do próprio GIT, você deve acessar este link git install.
Versionamento de código
O git é de fato uma das principais, e mais básicas, ferramentas a serem dominadas na área do desenvolvimento, isso se dá pela necessidade básica dela e sua aplicação. o GIT em específico se destaca pela sua praticidade por ser código aberto e gratuito, podendo ser aplicado em qualquer cenário, desde um pequeno projeto pessoal até mesmo em uma grande empresa desenvolvendo uma ferramenta com dezenas ou até centenas de desenvolvedores. Mas a pergunta principal é, o que é o controle de versão afinal? Podemos comparar o controle de versão como uma máquina do tempo, onde podemos voltar quando cometemos algum erro ou avançar quando precisamos, ele é um histórico de arquivos. Foi criado pelo lendário Linus Torvalds, pai do Linux, sua aplicação inicial se deu como uma solução para múltiplos desenvolvedores trabalharem no kernel do Linux sem que um código sobscrevesse o outro. Isso só pode acontecer porque o GIT trabalha com um método que utiliza branches (ramificações), podemos pensar em uma branch como uma linha do tempo, cada registro nessa linha do tempo é chamado de commit (marco). Assim, podemos criar cópias da linha do tempo principal e trabalhar nela, sem alterar o produto original.
Nessa altura do texto você deve estar pensando o que o GIT tem haver com o GitHub? eles não são a mesma coisa! O GIT como explicamos acima ele é a ferramenta responsável pelo versionamento, já o GitHub é uma das plataformas de hospedagem de arquivos e código. Ele não é a única solução no mercado, temos outras menções honrosas como GitLab, Bitbucket, SourceForge, GitKraken e até mesmo ferramentas auto-hospedadas como o Gitea e Gogs.
Conceitos básicos
- Repositório: Ele se trata do local onde seu código e seu arquivo de registro de histórico .git serão armazenados, popularmente chamamos de pasta, porém acostume a chamar de repositório a partir de agora.
- Working Directory: É onde iremos trabalhar localmente, por exemplo editando, excluindo ou criando sub-diretórios.
- Staging area: É onde preparamos as mudanças a serem incluídas no próximo commit que iremos fazer. É possível selecionar somente as alterações desejadas dentro do Working Directory também.
- Commit: É o registro do seu projeto capturado determinado momento, salvando seu estado atual e dos arquivos que foram adicionados na Staging Area. Eles possuem uma ID seguido por um hash, esse identificador único permite que seja facilitado o rastreio de mudanças, quem fez a mudança, facilitando o processo de reversão de alterações caso ela "quebre" o código em um ambiente produtivo.
- Branch: É a ramificação do repo(repositório), como vimos no exemplo inicial, a branch é utilizada para criarmos com features novas ou trabalhar em correções sem afetar o código da branch principal, comumente ela se chama main ou master.
- Merge: O Merge é a junção de duas branchs diferentes, quando combinamos o código de uma com a outra. Inicialmente essa será a parte mais difícil de compreender e aplicar, durante o merge, conflitos podem acontecer, pois dois códigos diferentes estão sendo combinados, podendo ser alterações por exemplo dentro de uma mesma parte de um código. Nessas situações o merge não será feito automaticamente, fazendo com que o desenvolvedor a selecionar qual parte vai entrar ou sair do código da main do projeto.
- Pull Request: O PR é um pedido para mesclagem de uma branch a outra. Esse pedido é revisado por outros desenvolvedores que estão trabalhando dentro do mesmo código. Assim não subindo bugs para ambientes produtivos por exemplo.
Sei que pode parecer tudo confuso por enquanto, fique tranquilo(a) abstrair um conceito sem prática é realmente mais difícil, porém quando começarmos a colocar a mão no terminal, tudo vai ficar mais simples.
Comandos GIT
O GIT pode ser gerenciado de formas variadas, através do CLI (Command Line Interface), pela integração com o VSCode ou até mesmo pelo seu GUI (Graphical User Interface). Aqui iremos abordar a utilização do CLI por ser a forma mais utilizada popularmente e por questões didáticas, dessa forma você vai entender melhor o que está acontecendo.
| Comando | Explicação |
|---|---|
git config --global user.name "seu nome" |
Esse comando serve para registrar seu nome no arquivo .config, assim seu nome vai ficar registrado em cada commit. |
git config --global user.email "nome@provedor.com" |
Como o nome, aqui ele vai deixar salvo seu email para contato. |
git clone |
Esse comando clona um repositório remoto para o repositório local |
git init |
Este comando vai criar um arquivo .git iniciando o registro no repositório que ele está. |
git add |
Este comando vai adicionar todos os arquivos do repositório para área de staging. |
git add NomeDoArquivo.txt |
Diferente do anterior, este vai adicionar somente o arquivo especificado para staging. |
git commit -m "mensagem" |
Esse é o comando do commit, ele salva as alterações na branch seguido de uma mensagem, essa mensagem normalmente explicita qual alteração foi feita. |
git rm NomeDoArquivo.txt |
O rm se trata da abreviação de remove, ele irá remover o arquivo do repositório, útil quando não queremos adicionar um arquivo ao versionamento. |
git status |
O status vai servir para mostrar a situação atual da branch, quais arquivos estão sendo rastreados e quais não estão sendo rastreados. |
git log |
Exibe um histórico dos commits, seus hashs e mensagens. |
git diff |
Apresenta diferença entre commits e arquivos. |
git branch |
Ele simplesmente explicita em qual branch estamos trabalhando. |
git branch new_branch |
Diferente do anterior, aqui criamos uma nova branch. |
git checkout |
O checkout é utilizado para sair de uma branch para outra |
git merge |
Este comando combina duas branches |
git reset --hard HEAD~1 |
Desfaz o último commit e suas alterações |
git remote |
O remote aborda o tratamento do repositório remoto, quando criamos um repositório local e queremos subir ele para um remoto, utilizamos o git remote add origin www.link.com do repositório remoto. |
git fetch origin |
Ele traz as alterações do repositório remoto sem mesclar com nosso repositório local. |
git pull |
Ele busca as alterações do repositório remoto e combina com o repositório local. |
git push |
Envia as alterações do repositório local para o remoto. |
Muito provavelmente você vai utilizar o GitHub como plataforma de hospedagem, porém se optar por utilizar outra plataforma você não está errado de maneira alguma. Por esse motivo vou deixar apenas um tutorial da propria GitHub de como configurar a autenticação da plataforma, lembrando que você deve criar uma conta também. No entanto aqui manteremos os exemplos somente do repositório remoto.
Configurando seu perfil no GIT
- Primeiro abra seu terminal, isso vai variar conforme o seu sistema operacional,
- No Windows utilize Win + R e digite CMD
- No mac Pressione as teclas Command (⌘) + Espaço, Digite Terminal e pressione Enter
- Por fim no Linux utilize o Ctrl + alt + T.
- Digite
git config --global user.name "Seu nome aqui", substitua pelo seu nome. - Em seguida, digite
git config --global user.email "seuemail@aqui.com", coloque seu email nesse campo. - Para verificarmos se está tudo certo, você pode utilizar o comando
git config --list, no final você pode verificar que o seu nome e email vai estar salvo se você fez tudo certo, por aqui terminamos. Você pode configurar outras coisas porém recomendo que mantenha-se pela configuração básica por enquanto.
Fazendo o primeiro Commit
- Crie um repositório Chamado "Exemplo", você pode criar uma pasta na sua área de trabalho ou onde desejar.
- Dentro do repositório "Exemplo" crie um arquivo "teste_git.txt".
- Agora iremos entrar no nosso repositório local, dependendo do sistema operacional que você está isso vai mudar, porém é necessário abrir o repositório que você está pelo terminal. Copie o caminho do arquivo e cole no seu terminal utilizando o comando
cd Exemplo/. - iniciaremos o repositório com o comando
git init. - Agora iremos verificar a situação da nossa branch, para isso utilizaremos o comando
git status, ele irá nos informar que estamos na branchmaine que ainda não temos nenhum commit, logo abaixo temos a mensagem:Untracked files: (use "git add..." to include in what will be committed) teste_git.txt nothing added to commit but untracked files present (use "git add" to track)
Aqui o próprio git está nos dizendo o que devemos fazer, é sempre importante ler o que o terminal está nos dizendo, quase sempre a solução está alí. Neste caso podemos notar que ele está nos avisando que existem arquivos que não estão sendo rastreados, e que devemos adicionar ele com ogit adda área de staging, para assim realizarmos o commit e rastrear esse arquivo. - Iremos executar o comando
git add ., sem especificar o arquivo teste_git.txt, assim ele vai adicionar todos os arquivos dentro daquele repositório, caso você utilize o comandogit add "teste_git.txt", não está errado, porém nessa situação ele adicionaria somente o arquivo especificado ao staging. - Agora que adicionamos o arquivo a área de staging, podemos utilizar o
git statuspara verificar a situação da nossa branch:On branch main No commits yet Changes to be committed: (use "git rm --cached
..." to unstage) new file: teste_git.txt
Agora ele nos informa que o arquivo teste_git.txt já está na área de staging, indicando que existem mudanças a serem commitadas. Entre parênteses ele também nos informa que podemos remover o arquivo caso deseje da área de staging utilizando o comandogit rm --cached "nome do arquivo", porém não iremos fazer isso agora. - Com tudo pronto para realizarmos nosso primeiro commit, vamos utilizar o comando
git commit -m "Initial commit", isso se trata de uma conveção para tratarmos sempre o primeiro commit com essa mensagem a fim de facilitar a identificação do desenvolvedor caso ele precise ler os logs. - Agora que você fez seu primeiro commit, podemos utilizar o
git statusnovamente, somente a fim de verificarmos como está a branch, é possível ver que não há nada para commitar, estamos na branch main e que a working tree está limpa. Não há nada mais a ser feito. - Caso você deseje verificar os commits realizados e as branchs existentes, podemos utilizar o comando
git log, nele é possível visualizar algumas informações. A primeira informação é o código exibido acima é o hash do commit, esse é um código único feito justamente para identificação. Abaixo temos o Autor, seguido do nome cadastrado e email cadastrado, a data e hora que foi realizado o commit e por fim a mensagem. - Agora iremos fazer um experimento a fim de teste, vamos adicionar uma mensagem dentro do arquivo, pode digitar qualquer coisa, no meu caso vou colocar uma
Geeks like to think that they can ignore politics, you can leave politics alone, but politics won't leave you alone
frase de Richard Stallman. - Em seguida vamos utilizar o comando
git statuspara verificarmos se algo mudou, podemos verificar que o git já identificou uma alteração. - A partir daqui vou deixar a sua percepção de tentar resolver a problemática a seguir. Pense, releia o passo a passo e utilize a lógica. Lembre-se do processo de Adicionar ao staging → commit.
- Agora vamos experimentar uma coisa diferente dentro do GIT, além da sua função de registrar e monitorar os arquivos como visualizamos anteriormente, vamos imaginar um cenário diferente. Vamos supor que outro desenvolvedor vai realizar uma nova feature adicionando outra frase de outra pessoa. Supondo que esse outro desenvolvedor já usou o comando
git clonepara ter esse repositório em sua maquina de forma local e já inseriu o texto novo, ele deve usar o comandogit checkout -b test, em seguida teremos a mensagem que mudamos para a nova branch test. - Vamos adicionar o arquivo alterado a área de staging com o
git add .em seguida realizar um commit informando que inserimos a nova frase no arquivo, lembre-se que a mensagem do commit deve ser clara e concisa, vamos usar ogit commit -m "Inserção de novo bloco de citação" - Agora, devemos executar os seguintes comandos para mergear as duas branchs:
- Para fazer o checkout para a branch main (ou master): →
git checkout main - Para mergear a branch test na branch main →
git merge test
Feito isso, chegamos ao fim de todo o ciclo da criação de uma nova feature, desde a criação do repositório até a adição dos códigos e merge para a branch principal do projeto.
- Para fazer o checkout para a branch main (ou master): →
Nos podemos visualizar a nossas brachs dessa forma, sendo cada uma das esferas na imagem um commit