Guia do Dev Iniciante – Introdução ao Git
Durante o desenvolvimento de um projeto nosso código passa por diversas alterações, ajustes, evoluções e até adição de novas funcionalidades. Podem acontecer diversos imprevistos, como descargas elétricas, um HD que estragou inesperadamente, o PC desligou e não ligou mais, entre outros. Nessas situações, como garantimos que nosso projeto estará guardado em um lugar seguro e que manterá um histórico de todas as alterações feitas durante seu ciclo de vida? A resposta é: utilizando um Sistema de Controle de Versão (SCV), ele irá registrar todas as alterações feitas nos arquivos do projeto ou conjunto de arquivos ao longo do tempo.
É de extrema importância que durante o desenvolvimento do projeto exista esse controle de versões, por todos os imprevistos que podem acontecer durante o dia a dia, o que pode envolver fatores externos ou internos e para ter de fato um controle de versões das funcionalidades do nosso projeto. Existem vários sistemas de controle de versão para diferentes fins, para o nosso caso, utilizaremos o Git.
O que é e para que serve o Git?
O Git é umas das ferramentas de controle de versão para software mais populares, principalmente pelo fato de ser open-source. Ele funciona de forma distribuída, o que significa que pode ser usado para grandes equipes de desenvolvimento, onde cada membro está em um local geográfico diferente.
Com ele é possível criar um histórico de todas as alterações do código dos nossos projetos, também podemos a qualquer momento voltar ou visualizar um código em suas versões de datas anteriores.
Essa ferramenta também permite que uma equipe consiga facilmente desenvolver diversas funcionalidades ao mesmo tempo no mesmo repositório. Um repositório, a grosso modo, é uma pasta que contém todos os arquivos do seu projeto e que possui o controle de versões através do Git.
Atualmente existem vários serviços online que hospedam os repositórios Git gratuitamente. Alguns exemplos populares desses serviços são: GitHub, GitLab e BitBucket. Para este guia, vamos nos familiarizar melhor com o GitHub.
Neste ponto, é possível compreender um pouco melhor a importância do Git e do controle de versões em nossos projetos, além de entender um pouco melhor sobre o que é o Git e para que serve, portanto, vamos falar um pouco sobre alguns conceitos importantes e logo em seguida vamos aplicá-los.
Alguns conceitos básicos, mas importantes
- Clone
Quando você cria um repositório novo em algum site de hospedagem de repositórios Git, como o GitHub, existe uma funcionalidade chamada Clone. O clone basicamente irá clonar o projeto do site (através de URL fornecida no repositório) para a sua máquina, existe um comando que pode ser executado no terminal ou você pode fazer através de algum programa que forneça uma interface para isso. Calma, avançando mais neste guia vamos mostrar como isso funciona na prática.
- Branchs
Quando você tem um repositório, cada branch funciona como uma ramificação do seu repositório, e com isso, você pode criar várias branchs.
Para exemplificar, imagine que você tem um projeto, nele existem features que estão em produção (já com usuários usando), existem algumas alterações que estão em desenvolvimento prontas para serem testadas mas não para ir para produção e também existem coisas novas sendo desenvolvidas mas que ainda não estão prontas para teste, como você separaria isso no seu repositório? Utilizando branchs.
Podemos usar uma estrutura básica de branchs que podem ser: master, develop e features, onde na master ficam as coisas que já estão em produção, develop coisas que estão em desenvolvimento prontas para serem testadas e nas features, para cada funcionalidade nova que estiver desenvolvendo é criada uma nova feature, como mostra a figura abaixo.
Observe que as features sempre são criadas a partir de um ponto na develop. Na feature em amarelo, note que ela é criada em um ponto da develop e mais a frente elas se “unem” novamente, essa “união” é chamada de merge, que vamos explicar mais a frente.
- Commits
Os commits são como um pacote de alterações feitas em uma branch do seu repositório. Sempre que realizamos alterações, o ideal é que seja feito um commit. Esses commits não são alterados nunca pelo Git, a menos que você solicite a alteração.
Através dos commits você vai conseguir ter todo o histórico das versões dos arquivos do seu projeto. Todo commit tem os arquivos alterados, um autor e uma mensagem resumindo o que foi feito na alteração.
- Pushs e Pulls
Sempre que um commit é feito, você precisará dar um push nele, o push é comando do Git que você pode rodar pelo terminal ou fazer por alguma interface gráfica, ele enviará de fato o seu commit para o site que está hospedando seu repositório Git.
O pull é um comando do Git que pode ser usando em algumas situações, como por exemplo, você está trabalhando em um projeto que tem várias branchs, está codando sua feature na branch x e precisa de uma alteração que está na branch y, você pode usar o pull para pegar essas alterações. O mesmo vale para quando por algum motivo existem alterações novas na sua branch, mas você ainda não tem elas na sua máquina, dando o pull você atualiza a versão da sua máquina com a última versão que está no repositório.
- Merges
O merge é uma forma de unir suas alterações de uma branch em outra branch. Por exemplo, você está trabalhando na sua branch chamada feature/x, agora você terminou e quer subir para develop para poderem testar sua funcionalidade, você irá abrir um merge request para que suas alterações na branch feature/x possam ser “colocadas” na develop.
Aplicando os conceitos aprendidos
Para aplicar os conceitos que acabamos de conhecer, vamos utilizar o GitHub, então se você ainda não tem uma conta lá, a hora é agora. Vamos utilizar também o terminal para executar o passo a passo e você precisará ter o Git instalado na sua máquina, você pode baixar por aqui.
O primeiro passo é criar um novo repositório no GitHub, você pode colocar um nome, no caso colocamos guia-guit por que que guia-git não estava disponível:
Com seu repositório criado, basta abrir ele e em seguida clicar no botão para clonar, será fornecida uma URL que você poderá usar para clonar em seu computador.
Com a URL em mãos, abra o terminal na pasta onde gostaria de guardar as informações do seu projeto. Se você ainda não tiver uma pasta criada, você pode criar uma, pelo terminal você pode usar o comando mkdir nome_da_pasta e uma nova pasta será criada. Você também pode usar cd nome_da_pasta para entrar na pasta criada, lembrando que quando o clone do repositório é feito, ele automaticamente criará uma pasta com o mesmo nome do repositório.
Agora você irá executar o comando:
git clone url_que_você_copiou_do_repositorio
Uma tela similar a tela acima deverá aparecer, agora é só entrar na pasta do seu repositório criado. Você pode usar o comando cd nome_do_repositorio.
Ao entrar em seu repositório no terminal, digite o seguinte comando:
git status
Este comando irá mostrar em qual branch você está, se foram feitas alterações e se você tem algo para commitar. Na imagem acima podemos observar que estamos na branch master e que não temos nada para commitar, por padrão os repositórios já vem uma branch master criada.
A partir de agora, podemos adicionar arquivos localmente em nosso repositório e em seguida subirmos ele para o repositório no GitHub através de um commit.
Para exemplificar isso, vamos criar um novo arquivo na pasta. Você pode usar algum editor de texto que está familiarizado. No caso, vamos usar o Sublime Text, se também estiver usando ele e estiver no Linux, você pode usar comando subl . e então o Sublime irá abrir automaticamente na pasta onde você estava no terminal, caso contrário, você pode abrir seu editor manualmente e entrar na pasta do seu repositório através dele.
Note que neste momento, nosso projeto só tem um arquivo, o README.md, nós podemos alterar ele para colocar algumas informações sobre nosso projeto e salvar, veja:
Agora de volta ao nosso terminal, rode o comando o git status mais uma vez:
Note que agora, temos alterações e podemos fazer um commit. Para isso você pode utilizar os seguintes comandos:
- git add . (este comando irá adicionar todos os seus arquivos com alterações, a grosso modo, em uma fila de arquivos que vão ser enviados para o GitHub com o próximo commit que fizer)
- Em seguida, use git commit -m “sua mensagem do commit aqui”
- Feito o commit, use git push para enviar as alterações para o GitHub.
Você irá ver uma tela similar a tela da imagem acima. Neste momento, se você for em seu repositório verá algo similar a imagem abaixo:
Note que o texto que alteramos já está visível no repositório.
Vamos agora criar uma nova branch. Para isso utilize o seguinte comando:
git checkout -b “nome_da_sua_branch”
Se rodarmos o comando git status em seguida, veremos que estamos agora na nova branch criada.
Agora vamos criar um novo arquivo nesta branch.
Criamos um arquivo .html, mas você pode criar qualquer tipo de arquivo. Também vamos alterar novamente o arquivo README e vamos deixar o título com o nome correto.
Salve suas alterações e dê git status no terminal.
Note que agora, o novo arquivo que criamos aparece como “Arquivo não monitorado”, isso quer dizer que até então, não se tem um controle de versão dele pois é um arquivo novo!
Agora é só fazer o commit.
Como a nossa branch é nova, ocorre um erro ao tentar fazer o push, basta copiar o comando sugerido e colar no terminal, pronto, agora você já subiu as alterações para sua nova branch no GitHub.
Abrindo seu repositório no GitHub, você verá que uma mensagem falando que sua branch tutorial_git tem novos pushes. Também é possível observar que as alterações e o novo arquivo que criamos não estão aparecendo ali, pois estamos vendo a branch master.
Agora clique onde está na branch master:
E em seguida clique na nova branch que criamos, você poderá ver que nossas alterações estão lá. A criação de uma branch vem com o intuito de podermos fazer alterações em um espaço separado e quando terminarmos nossas alterações, podemos subir novamente para a master através do merge.
Imagine que terminou de fazer todas as suas alterações no código que estava mexendo e quer que suas alterações da branch tutorial_git vão para a master.
Você irá abrir um pull request.
Uma tela similar a tela abaixo irá aparecer, você pode adicionar uma descrição ao seu pull request e até mesmo marcar uma pessoa do seu time (caso esteja trabalhando em time) para revisar seu código.
Ainda no pull request, mais abaixo, você pode visualizar todo o histórico de alterações que você fez em relação às alterações existentes na master, ou seja, o que irá mudar na master se fizermos a junção dela com a branch nova que você criou.
Ao criar o pull request, basta mergar ele, ou pedir para alguém fazer isso pra você após revisar seu código.
Você verá a mensagem que seu pull request foi realizado com sucesso e o merge foi feito na branch master. Você também pode apagar a branch que criou.
Voltando no nosso repositório, você pode observar que a branch master já está atualizada com nossas alterações. Note que só com essas pequenas alterações já temos 4 commits no nosso repositório.
Nossa dica pra você é faça muitos commits, eles vão funcionar como se fossem os saves daquele jogo difícil.
E com isso finalizamos nosso Guia Básico de Git. Neste guia você aprendeu um pouco sobre commits, pushs, branchs, repositórios, pull request e merge.
Esperamos que tenha sido esclarecedor e qualquer dúvida entre em contato conosco. Confira os demais textos do Guia do Dev Iniciante, Componentização usando Vue.js e Consumindo APIs.
Texto: Rhebeca Abreu