Roadmap backend #11 - Git e Github

Roadmap backend #11 - Git e Github

Controle de versão, assunto importantissímo!

Controle de Versão - O que é?

Lembra da epoca escolar onde você tinha que fazer um trabalho no word/powerpoint e toda vez você salvava com um nome diferente?

  • ProjetoAgoraFInalizado.pptx
  • ProjetoAgoravaiCaramba.pptx
  • DEfinitivamenteMEuProjetoEStaPront.pptx

Então, se você soubesse antes o que era controle de versão, você não passaria tanta raiva.

Controle de Versão é uma maneira de gerenciar diferentes versões de um documento.

Entendendo as principais coisas:

  • Responsável pelo versionamento dos documentos, sem que você precise fazer isso de maneira manual.
  • Outros sistemas de controle de versões trabalham com as diferenças dos documentos, já o Git trabalha com os estados.

O que é Github?

O Github NÃO é a mesma coisa que o Git, ele é um serviço da web (compartilhado) que da suporte para projetos que usam versionamento com o Git.

Instalação do GIT

Acesse: hostinger.com.br/tutoriais/tutorial-do-git-..

Configurações do GIT

  • Definindo username:
      git config --global user.name "Your Name"
    
  • Definindo email:
      git config --global user.email "Your email"
    
  • Definindo editor de código padrão:
      git config --global core.editor code (EXEMPLO)
    
  • Descobrindo valor da chave:
      git config user.name
      Gabriel Valin
    

Essencial do Git

Primeira coisa a se fazer com o git é inicializar um repositório, então crie a pasta do seu projeto e de um dentro dela no terminal:

git init

Ciclo de vida dos status dos Arquivos e Comandos

ciclo de vida git

Comando para mostrar como está o repositório no momento:

git status

Terminal: terminal1

Criando um arquivo:

vim README.md
// Escreva algo dentro dele.

Digite no terminal novamente:

git status

Terminal: terminal2 Podemos ver o primeiro momento do ciclo de vida. (Untracked) - Acabou de ser criado, mas o Git ainda não o reconhece.

Adicionando o arquivo e dando um status novamente:

git add README.md
git status

Terminal: terminal3 Podemos ver que o arquivo se encontra no estago de Staged.

Entre no arquivo README.md escreva mais alguma coisa, salve e veja o status novamente, o resultado será esse:

Terminal: terminal4 Ele está te dizendo que reconhece seu arquivo, porém ele foi modificado, se você quiser atribuir as modificações você precisa adicionar ele, utilize novamente o

git add README.md

Commitando arquivos - Que isso?

Um commit é o momento em que você diz para o Git: "Pegue meus arquivos e crie uma versão do meu projeto!"

Como commitar?

git commit -m "Adicionei o README no projeto."

Terminal: terminal5 master = branch atual e240808 = hash do commit (IDENTIFICAÇÃO) Adicionei o README no projeto = comentário 1 file changed, 3 insertions(+) = 1 arquivo modificados com quantas linhas foram adicionadas

Uma boa prática sempre fazer comentários semânticos e com algum sentido para o contexto quando você está trabalhando com outras pessoas, afinal, ninguém é mágico para ficar descobrindo o que você fez né?!

RECAPITULANDO: UNTRACKED = Não foi visto pelo git. UNMODIFIED = Nenhuma modificação. MODIFIED = Editado mas não foi adicionar para ser commitado. STAGED = Commitado.

Visualizando coisas importantes

Com o comando git log você pode ver coisas como os últimos commits feitos, quem fez, quando, se já foi mergeado, hash do commit, muitas coisas.. Aqui vai alguns exemplos que podem ser interessantes:

git log

git log --decorate (mostra informações sobre branchs, merge, entre outras coisas...)

git log --author="Gabriel Valin" ( retorna todos os commits feitos por Gabriel Valin )

git shortlog (mostra em ordem alfabética os nomes dos autores, quantidade de commits e quais foram).

git shortlog -sn (vai mostrar quantidade de commits e quem fez)

git log --graph (mostra em forma gráfica o que está acontecendo com as branchs do repo).

O hash do commit é algo bem importante pois com ele conseguimos visualizar tudo que foi feito dentro dele.

git show <hashcommithere>

Diff?

Comando que permite que você veja quais alterações foram feitas antes que você envie isso para algum lugar haha, show né?!

Entre no README.me, adicione alguma linha e no terminal digite:

git diff

Ele irá te mostrar as alterações feitas no seu arquivo. (Vai que você esqueceu o que fez em algum arquivo e serve para revisar também).

Desfazendo burradas

Existe a possibilidade de você editar um arquivo salvar e ainda não ter adicionado e a outra é você já ter adicionado.

Solução (sem git add):

git checkout <filename>

Solução (com git add - área de STAGED):

git reset HEAD <filename>
// HEAD = Tirar arquivo do STAGED.

Dicas: o git reset possue 3 flags que podem ser passadas para ele:

git reset --soft (mata seu commit, mantém os arquivos modificados e volta para o STAGED pronto para ser comittado).
git reset --mixed (mata seu commit, mantém os arquivos modificados e volta para o MODIFIED)
git reset --hard (Mata o commit e tudo que foi feito nele).

Você sempre deve passar o hash de um commit anterior para que o git entenda a partir de qual você quer voltar!

Repositórios Remotos

Repositório remoto é aquele que fica em outro servidor, o mais conhecido é o Github.

Conectando repositório local com o remoto

git remote add origin <repo>

Enviando para repositório remoto

git push -u origin master

// origin = para onde
// master = de onde (local)

Edite o arquivo README.md, faça um commit e você poderá enviar para a branch master novamente dessa maneira:

git push origin master

Branchs

São ramificações onde diversos usuários podem trabalhar em cima de um projeto sem que ocorra alteração onde cada um está trabalhando.

  • Temos a branch master (normalmente onde fica o código da produção)
  • Eu recebi a tarefa de adicionar um formulário em uma página, então eu vou criar uma branch a partir da master.
  • John recebeu uma outra task e também criou uma branch a partir da master para trabalhar.
  • Desta maneira ambos conseguem desenvolver suas tasks sem complicações de desenvolvimento/bugs.

Criando uma branch:

git checkout -b newbranchname

Movendo e deletando branchs:

git branch -D newbranchname

Merge e Rebase

Este assunto é muito mais entendível ao se ver ele na prática, por isso recomendo que assista à estes 3 vídeos de onde estou me baseando para criar esse artigo:

Entendendo Merge: youtube.com/watch?v=R_kxAnuyQss&list=PL..

Entendendo Rebase: youtube.com/watch?v=lXnRC_W2PBk&list=PL..

Ambos na prática: youtube.com/watch?v=lmbwADzYJew&list=PL..