Isso e onde controle de versão é uma habilidade que qualquer empregador espera que você domine. Também é extremamente útil para quem trabalha em qualquer coisa que seja salva em pedaços - de um programa de computador a uma receita e um romance.

O que é controle de versão?

O controle de versão refere-se à capacidade de salvar seu local em um documento ou pasta e fazer referência a salvamentos anteriores.

Enquanto escrevo este artigo, minhas alterações mais recentes substituem constantemente minhas versões anteriores. Não se trata de controle de versão, porque não posso voltar ao rascunho que havia uma semana atrás. Mas se eu escrevesse isso usando o Git, isso seria possível.

O que é o Git?

Git é um sistema de controle de versão desenvolvido por Linus Torvalds em 2005 (o mesmo cara que escreveu o Linux). O Git ajuda os desenvolvedores a acompanhar o estado de seu código e permite a colaboração em uma base de código. Analisaremos os principais componentes um pouco mais tarde.

Se você quiser acompanhar, terá que ter o Git instalado no seu computador. Abra um terminal e digite git. Se você vir uma lista de comandos possíveis, está pronto!

Muitos computadores vêm com o Git já instalado. Se você precisar instalar, você pode seguir o instruções aqui para o seu computador.

Usando Git

Se você já usou um programa de computador ou videogame e percebeu que pode voltar para uma versão salva anteriormente, entende por inerência a necessidade do Git. É simplesmente salvar um instantâneo do seu programa a tempo.

Mas, em vez de precisar acompanhar todas as linhas de código do seu programa, ele observa as alterações entre o código que você tem agora e a última vez que você salvou. Ele mantém uma nota de quando cada linha de código foi salva pela última vez e as armazena em uma pasta oculta especial.

Vamos considerar este programa JavaScript. Ele imprime três linhas no console (uma saída que você pode ver no seu navegador ou terminal):

console.log('Hello, this is a git example!')console.log('And here is another!')console.log('And yet a third')

git init

Se eu quiser salvar versões do meu trabalho, posso usar o Git. Primeiro, eu vou digitar git init no meu terminal para que eu possa começar a usar o Git. Isso criará um .git pasta, onde o Git armazenará seus arquivos.

git add

git add . adicionará todos os arquivos em nosso programa. Se você fez git init depois de criar um arquivo ou sempre que criar novos arquivos, você precisará dizer ao Git para começar a rastrear alterações neles com este comando.

git commit

Em seguida, digito git commit -am "Initial commit". git commit é o comando para salvar uma versão do nosso código. o -am é chamado de “sinalizador” e sinaliza que existem ações opcionais que gostaríamos de executar com esse commit. A bandeira a significa que vamos salvar todas as nossas alterações. A bandeira m indica que forneceremos uma mensagem posteriormente, que é "Initial commit".

Você pode escrever o que quiser aqui – o freeCodeCamp tem muitos artigos sobre como escrever ótimas mensagens de confirmação.

Como o Git salva alterações

Se fizermos uma alteração em nosso programa (como alterar o texto na primeira linha), convém salvar uma versão. Poderíamos até alternar entre versões se quiséssemos ver como nosso programa mudou ao longo do tempo.

console.log('Now I have changed the first line.')console.log('And here is another!')console.log('And yet a third')

git diff

Aqui está o que isso parece quando você executa git diff. O Git mostrará a você diferença entre o código que você tem agora e a última vez que ele foi salvo.

É um pouco difícil entender o que está acontecendo aqui, mas o - são exclusões e os + são inserções. Removemos o texto “Olá, este é um exemplo de git!” e adicionou o texto “Agora mudei a primeira linha”. É assim que o Git acompanha o que mudou entre as versões.

diff --git a/git.js b/git.jsindex eb0f1d1..8dbf769 100644--- a/git.js+++ b/git.js@@ -1,3 +1,3 @@+console.log('Now I have changed the first line.')-console.log('Hello, this is a git example!') console.log('And here is another!') console.log('And yet a third')

Agora que analisamos as alterações que estamos comprometendo, podemos prosseguir e fazer um segundo commit: git commit -am 'Update first console log'. Isso salvará as alterações que fiz na primeira linha do texto.

log git

Podemos revisar os commits que fizemos com o comando git log. Se eu executá-lo no meu programa agora, recebo esta saída:

commit 67627dd44e84a3106a18a19e94cf9f3723e59b3c (HEAD -> master)Author: amberwilkie 
Date:   Wed Apr 22 16:55:39 2020 -0400

    Update first console log

commit 49fe4152f474a9674a83e2b014a08828209d2690
Author: amberwilkie 
Date:   Wed Apr 22 16:54:59 2020 -0400

    Initial commit

Vemos nossas mensagens de confirmação, o horário em que confirmamos e um ID exclusivo para nossa confirmação, que podemos usar para referenciar confirmações no futuro.

git checkout

Se quisermos voltar e ver as alterações em nosso código de uma confirmação anterior, faremos isso com git checkout 49fe4152f474a9674a83e2b014a08828209d2690. O Git colocará nosso código em um estado temporário para que possamos ver como era o código naquele instantâneo no tempo.

Copiei o ID para meu primeiro commit. Se eu executar este comando, meu programa diz “Olá, este é um exemplo do git!” na primeira linha.

Para voltar ao código mais recente, digite git checkout master.

Ramos

Se você notou acima, tivemos que digitar master para voltar ao estado atual do nosso código. Por quê? Porque master é o nome padrão para a ramificação de ramificações – o local em que nosso código está mais atualizado.

O Git depende da ramificação para manter nosso código. Você pode considerar master o tronco da sua árvore de código. Você pode interromper e fazer algumas alterações, mas o objetivo final é sempre trazê-las de volta ao porta-malas, para master.

Você pode usar git checkout para criar uma nova ramificação, não apenas para verificar as versões anteriores do seu código. Tentar git checkout -b new-branch. o -b A flag é usada quando estamos criando uma nova ramificação e depois da flag, escrevemos o nome da nossa nova ramificação. Podemos fazer muitos commit nesta ramificação e depois recuperá-los para dominar com um processo chamado fusão.

No diagrama abaixo, os pontos representam confirmações. Dois ramos foram feitos “fora” do mestre. No desenvolvimento de software, costumamos chamar essas ramificações de “recursos”, em oposição à ramificação principal principal. O ramo azul foi mesclado novamente no mestre e o ramo amarelo ainda está sendo desenvolvido.

Observe que, embora o ramo amarelo tenha sido criado após o ramo azul, apenas as alterações do mestre serão visíveis nesse ramo. Se fizermos uma terceira ramificação em algum momento no futuro, as alterações da ramificação principal e da ramificação azul estarão presentes na terceira ramificação.

Screenshot 2020 05 03 at 09.16.25
Visualização de ramificação do Git

mesclar git

git merge pegará todos os commits que você fez nesse ramo e os colará no master ramo, salvando seu trabalho.

Por que usar ramos?

Se você estiver trabalhando sozinho, pode não fazer muito sentido dividir seu trabalho em ramificações. Por que não salvar tudo master?

A utilidade da ramificação não fica muito clara até começarmos a pensar em trabalhar em uma equipe de desenvolvedores. Se todos estivessem comprometidos com o master cada vez que faziam uma alteração, as coisas ficavam muito confusas muito rapidamente. Também seria difícil controlar qual código vai “para produção” (disponível para clientes) e qual código ainda está sendo testado ou trabalhado.

Dessa forma, todo desenvolvedor pode ter sua própria ramificação (ou, provavelmente, muitas), trabalhar em seu recurso pelo tempo que for necessário e mesclá-lo quando for a hora certa.

O que é o GitHub?

GitHub é uma plataforma gratuita (para uso pessoal), hospedada em nuvem, para código. Ele funciona com o Git nos computadores de você e de seus colegas, servindo como o origem, a fonte da verdade para quem trabalha no código.

Você e seus colaboradores carregam seus códigos no GitHub periodicamente, e o GitHub fornece ferramentas para ajudar a gerenciar alterações no código ao longo do tempo.

Carregando seu código no GitHub

Primeiro, você precisará criar um Conta GitHub. Você usará essa conta durante toda a sua carreira em programação, então dica: fique com um nome profissional, de preferência com o seu nome real.

Quando entrar, procure um + no canto superior. Clique em “Novo Repositório” (o nome das pastas Git, “repositório” para abreviar). Dê um nome a ele – provavelmente o mesmo que a pasta que você criou anteriormente, onde salvou suas confirmações. Depois, clique em “Criar Repositório”. Agora você pode copiar o URL para o qual você é redirecionado e podemos definir o origem para o nosso código.

Haverá uma etapa de autenticação em algum momento aqui – basta seguir as instruções. O Git é muito bom em nos dar instruções claras sobre os próximos passos a serem seguidos.

origem remota do git remote

Agora vamos dizer à nossa base de código (a pasta onde está o nosso código) onde armazenar nosso código na nuvem. Digitaremos git remote add origin , que definirá um origin para o nosso repositório. Agora podemos empurrar para nosso origin para armazenar nossa nuvem no GitHub.

empurrão

Supondo que ainda estamos em nossa master branch (ou seja, não fizemos check-out de outro branch), agora podemos digitar git push e nosso código irá para o GitHub.

Visualizando seu código

Agora seu código está no GitHub! Aqui está a aparência do meu exemplo acima depois de seguir as etapas do GitHub que expliquei:

Screenshot 2020 05 03 at 09.39.34
Repo GitHub para o exemplo git neste artigo

Você pode clicar nos arquivos e pastas do seu repositório, visualizando o estado atual do código. Você também pode visualizar as versões anteriores do código, clicando em “X confirma” no lado direito, no meio. Você verá uma lista dos commits feitos no repositório e, se clicar neles, poderá navegar nos arquivos do seu projeto como eles existiam naquele intervalo de tempo.

Solicitações Pull

Existem muitos outros recursos do GitHub, mas o mais importante na colaboração com colegas é um solicitação de recebimento. Uma solicitação de recebimento (muitas vezes reduzida para PR) é uma maneira de gerenciar as alterações recebidas na base de código.

Para criar um, você criará uma nova ramificação no computador local, criará pelo menos uma confirmação nessa ramificação e, em seguida, git push origin head para enviar essa ramificação para o GitHub. (Você pode colocar o nome da sua filial em vez de head mas é útil para manter tudo combinado exatamente).

Agora, quando você voltar ao GitHub, deverá ver sua filial disponível para fazer um PR.

Screenshot 2020 05 03 at 09.45.04
O GitHub solicita automaticamente que você crie PRs a partir de novas ramificações

Se você clicar no botão “Comparar e puxar solicitação”, poderá alterar muitas configurações do seu PR. Os mais importantes são geralmente título e descrição. Se você estiver trabalhando em uma equipe, pode marcar colegas para pedir que revisem seu código, adicionem a projetos e muitos outros recursos dos quais você provavelmente ainda não se importa.

Screenshot 2020 05 03 at 09.48.31
Criando uma solicitação pull no GitHub

Observe que estamos comparando ramificações. Aqui estamos solicitando adicionar as alterações deste ramo (pr-example) no master ramo. Mas poderíamos segmentar qualquer um dos outros ramos em nosso repositório. Por enquanto, apenas entenda que master não é o único ramo no qual você pode “fazer uma solicitação de recebimento”.

Ao clicar em “Criar solicitação de recebimento”, você verá esta tela:

Screenshot 2020 05 03 at 09.52.36
Exemplo de solicitação pull

Você pode ver todos os commits neste ramo (eu tenho apenas um – “Alterar terceira linha do programa”) e também pode fundir sua solicitação de recebimento.

Lembra como poderíamos mesclar nosso código localmente quando falamos sobre o Git? Podemos executar a mesma ação com nosso código hospedado na nuvem no GitHub. Se você clicar no botão verde “Mesclar solicitação de recebimento”, suas alterações serão mescladas no mestre.

puxão

O último comando que você precisa saber agora é git pull. Se você mesclou seu PR ao master ramificação no GitHub, agora há alterações no diretório origin que você ainda não possui no seu computador local. Se você verificar o master ramo, então git pull origin master, as alterações que você acabou de mesclar agora estarão no seu computador local.

➜  git-example git:(master) git pull origin masterFrom https://github.com/AmberWilkie/git-example * branch            master     -> FETCH_HEADUpdating 67627dd..38ad2daFast-forward git.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)

Que “Avanço rápido” se refere ao ramo principal local “atualizando” as origin ramo no GitHub. Concluímos o círculo:

  • Mudanças locais
  • Pressione para o GitHub e faça PR
  • Mesclar PR no mestre
  • Puxe o mestre para o computador local

Quando estiver familiarizado com essas etapas, você estará 80% do caminho para dominar o Git e o GitHub!