O objetivo da aula de hoje é conhecer uma das ferramentas mais importantes no desenvolvimento de software moderno e remoto, que é o versionamento de arquivos, mais precisamente com a utilização da ferramenta GIT.
GIT é um sistema de controle de versão, ou versionamento, que permite que você rastreie alterações em seus arquivos ao longo do tempo. Com isso, você pode criar diferentes versões de um arquivo e alterar entre elas facilmente. É uma ferramenta muito útil para se trabalhar em equipe, pois várias pessoas podem trabalhar no mesmo arquivo, ao mesmo tempo, sem se preocupar em perder o trabalho um do outro. Além disso, o GIT ainda mantém registro de todas as alterações feitas em um arquivo, o que lhe permite voltar às versões anteriores, caso necessário.
Para usar o GIT, você precisa criar um repositório GIT e adicionar arquivos a ele. A partir disso, você já consegue fazer commits das alterações que fez nos arquivos, salvando, assim, uma nova versão no repositório GIT.
Sendo amplamente utilizado na indústria de desenvolvimento de software, ele é uma ferramenta essencial para gerenciar projetos de forma eficiente. Pronto(a) para conhecer mais sobre o GIT?
Você provavelmente já usou algum sistema de versionamento de arquivos mesmo antes de estudar tecnologia. Lembre dos seus trabalhos em grupo, em que cada um fazia uma parte no seu computador e em determinado momento um dos integrantes do grupo anexava o trabalho do outro e duplicava o arquivo com no nome trabalho”_v2.docx, trabalho_final.docx” etc.
Assim também era no desenvolvimento de software antes do surgimento dos sistemas de controle de versão, pois havia um processo de gerenciamento de mudanças em arquivos que era manual e propenso a erros, o que muitas vezes resultava em perda de dados e retrabalho.
Esse aspecto é justamente o problema que o versionamento de arquivos soluciona, a falta de controle sobre alterações em arquivos em um projeto, especialmente em projetos colaborativos que envolvem várias pessoas trabalhando no mesmo conjunto de arquivos. Com o versionamento de arquivos, todas as alterações feitas em um arquivo são registradas e mantidas em um repositório centralizado, permitindo que os membros da equipe possam acompanhar e entender facilmente as mudanças realizadas.
Outra vantagem é que com o uso de um sistema de controle de versão, os desenvolvedores podem facilmente acessar versões anteriores de um arquivo, rastrear quem e quando fez alterações específicas, e desfazer mudanças que causaram problemas em um projeto. Ajudando, então, a aumentar a eficiência, produtividade e qualidade do trabalho em projetos de software. Muito útil esse sistema não é mesmo?
Hoje irei apresentar um case fictício sobre uma empresa de desenvolvimento de software, a Global Software Corporation, que estava trabalhando em um projeto de desenvolvimento de software que envolvia várias equipes de desenvolvimento em diferentes países e para gerenciar o projeto de forma eficiente, a equipe decidiu usar o sistema de controle de versionamento de arquivos GIT.
Usando o GIT, os desenvolvedores da equipe puderam criar diferentes branches de desenvolvimento para trabalhar em recursos específicos do projeto. Esses branches são como várias linhas do tempo acontecendo ao mesmo tempo e que depois podem se juntar para agregar o trabalho da equipe feito em paralelo. Com isso, cada membro da equipe pôde trabalhar em sua própria branch sem interferir no trabalho de outras pessoas.
Quando uma alteração precisava ser mesclada com o código principal, a equipe usava o GIT para criar um pull request (pedido). Isso permitiu que outros membros da equipe revisassem as mudanças antes de serem mescladas ao código principal, garantindo que o código fosse sempre de alta qualidade.
No final, a equipe foi capaz de concluir o projeto dentro do prazo e do orçamento, graças ao uso efetivo do GIT. Além disso, a equipe foi capaz de manter um registro preciso de todas as alterações ao longo do tempo, o que ajudou a melhorar a qualidade do código e a facilitar a manutenção do projeto no futuro.
O case, apesar de fictício, demonstra como funciona o desenvolvimento de software com o uso do versionamento e quão vantajosa pode ser sua utilização.
Antes de nos aprofundarmos em como o sistema de controle de versão GIT funciona – que hoje é de longe o controle de versão mais usado pelo mercado –, é necessário você saber o que é controle de versão de código. Segundo Ruby, Thomas e Hansson (2016), controle de versão é a prática de gerenciar alterações em arquivos de código-fonte ao longo do tempo, permitindo que você volte a versões anteriores, se necessário. Isso é feito através do uso de um sistema de controle de versão, como o GIT, que permite rastrear as mudanças feitas em cada arquivo e a data em que foram feitas e, principalmente, quem as realizou.
Controlar a versão é uma prática essencial para o desenvolvimento de software em equipe, permitindo que os membros da equipe trabalhem em arquivos de código-fonte simultaneamente, sem interferir no trabalho um do outro. Além disso, o controle de versão também ajuda a identificar e corrigir bugs, permitindo que você compare o código-fonte de versões anteriores com o código-fonte atual para identificar possíveis problemas.
Santos (2020) diz que a principal diferença entre GIT e qualquer outro SCV (Sistema de controle versão) é a maneira como o GIT trata seus dados. Conceitualmente, a maioria dos outros sistemas armazenam informação como uma lista de mudanças nos arquivos, o que é diferente no GIT, pois ele trata seus dados mais como um conjunto de imagens de um sistema de arquivos em miniatura. Toda vez que você fizer um commit, ou salvar o estado de seu projeto GIT, ele basicamente tira uma foto de todos os arquivos e armazena uma referência para esse conjunto de arquivos. Caso o arquivo não tenha sido alterado, ele não armazena o arquivo novamente, apenas cria um link para o arquivo idêntico anterior já armazenado. O GIT trata seus dados como um fluxo do estado dos arquivos.
Um outro ponto diferencial, com relação ao GIT, é o fato de que a maioria das operações precisa somente de arquivos e recursos locais para acontecer, você não precisa de nenhuma informação de rede ou de outro usuário para versionar seu código. Todo esse controle do projeto pode acontecer localmente, em seu notebook, o que é ótimo para caso, por exemplo, você atue sozinho(a). Mas é claro que atualizar um repositório remoto com essas informações é um fator de segurança que não se deve negligenciar.
Se você tiver que lembrar de algum conceito GIT que seja o conceito onde todo dado possui 3 estados, pois a partir disso os demais conceitos básicos fluem com mais facilidade, o GIT possui 3 estados principais que seus arquivos podem estar, no inglês:
Committed: significa que os dados desses arquivos já estão armazenados, versionados de forma segura pelo GIT localmente.
Modified: significa que você alterou o arquivo, mas ainda não fez o commit no seu banco de dados, e vale acrescentar, se ele está modificado é porque já existe uma versão anterior dele gravada pelo GIT.
Staged: significa que você marcou a versão atual de um arquivo modificado para fazer parte de seu próximo commit.
A Figura 1 mostra como funciona o fluxo de trabalho GIT, onde você vai criando novos arquivos dentro do projeto, ou os alterando, usa o comando git add para movê-los para o estado de modified para staged e uma vez feito isso você consegue criar um commit com o comando git commit, que irá novamente alterar os estados desses arquivos para committed.
Até agora você pode conferir o processo de versionamento apenas em sua máquina, ou seja, se for o caso do projeto estar sendo trabalhado por uma equipe ainda se faz necessário que esse repositório esteja on-line e compartilhado para que os(as) outros(as) integrantes da equipe consigam versionar e para que você consiga atualizar seu repositório local com as atualizações deles.
Sendo assim, partindo do princípio que o projeto e seu repositório foi criado por algum outro membro da equipe, o processo para iniciar seu trabalho seria clonar o repositório “remoto” para que tivesse acesso às informações citadas anteriormente.
Para isso, você irá usar o comando git clone <endereço-do-repositório> e a partir disso terá uma pasta em sua máquina local com todo o código criado neste repositório. Para conferir o que foi feito, basta executar o comando git log para ver o registro de versionamento feito, para começar a criar/alterar seus arquivos e a sequência apresentada anteriormente (git add / git commit). Caso você tenha criado ou alterado o código ao ponto que é importante que os outros membros da equipe tenham essa atualização, você primeiro irá atualizar seu repositório local com o comando git pull origin main e depois irá enviar suas alterações locais para o repositório remoto através do comando git push origin main.
Ao longo dessa lição, foram citados diversos comandos GIT, por isso, faz-se necessário uma área com a descrição dos principais comandos utilizados quando se trabalha com a ferramenta git:
git init: inicializa um novo repositório git;
git add: adiciona alterações aos arquivos ao stage;
git commit: cria um novo commit com as alterações adicionadas;
git status: exibe o status atual do repositório, incluindo arquivos modificados e não adicionados ao stage;
git log: exibe um histórico detalhado de commits;
git clone: clona um repositório remoto existente na internet ou em sua própria máquina;
git push: envia as alterações locais para um repositório remoto;
git pull: obtém as alterações mais recentes de um repositório remoto;
git branch: exibe uma lista de branches (ramos) no repositório atual;
git checkout: muda para um branch (ramo) no repositório atual;
git merge: combina as alterações de um ramo para outro;
git remote: gerencia as conexões com repositórios remotos;
git diff: exibe as diferenças entre duas versões de um arquivo.
Essa é uma lista de alguns dos comandos git mais usados, mas existem muitos outros que podem ser úteis dependendo do seu fluxo de trabalho. A documentação oficial é uma ótima fonte de informações detalhadas sobre todos os comandos disponíveis e está disponível em: https://git-scm.com/docs.
Uma curiosidade que talvez você já tenha percebido! Se você já realizou algum desafio proposto nas trilhas de desenvolvimento do Alura – plataforma de desenvolvimento que a Secretaria de Educação disponibiliza para vocês e que é usada em nossas atividades práticas – certamente você fez uso do sistema GIT. A plataforma conta com conexão ao GitHub para armazenar os códigos criados pelos alunos. Gostou? Agora você poderá explorar o Alura com mais consciência e testar o funcionamento do sistema de versionamento GIT.
Neste tópico, irei apresentar como você pode aplicar o uso da ferramenta git para criar um repositório com arquivo versionado.
Instale a ferramenta: Baixe e instale o GIT em seu sistema operacional. Você pode encontrar as instruções para a instalação em: https://git-scm.com/book/pt-br/v2/Come%C3%A7ando-Instalando-o-Git.
Crie seu projeto: Vá em algum lugar de sua preferência e crie uma pasta chamada projeto.
Crie o seu repositório: em seu terminal, navegue até a pasta onde você deseja criar o repositório e execute o comando git init para inicializar o repositório git.
Configure o seu repositório: para configurar seu nome de usuário e e-mail, que serão associados aos seus commits, execute os seguintes comandos:
a. git config --global user.name “Seu Nome”;
b. git config --global user.email “Seu-email@exemplo.com”.
Crie o seu primeiro arquivo: crie um arquivo na pasta do seu repositório utilizando um editor de código ou terminal. O nome do arquivo deverá ser hello_world.txt
Adicione o arquivo ao repositório: execute o comando git add hello_world.txt para adicionar o arquivo ao seu repositório git.
Crie o seu primeiro commit: execute o comando git commit -m “meu primeiro commit” para criar um novo commit com as alterações no arquivo adicionado.
Verifique seu histórico de commits: execute o comando git log para ver uma lista de todos os commits realizados, incluindo as mensagens de commit e as informações do autor.
Versione as alterações: se você fizer alterações no arquivo hello_world.txt, basta repetir os passos 6 a 8 para adicionar e criar um novo commit com as alterações e ver seu histórico de criação.
RUBY, S.; THOMAS D.; HANSSON, D. Agile Web Development with Rails. 5 ed. Pragmatic Bookshelf, 2016.
Staging Area. GIT. Disponível em: <https://git-scm.com/about/staging-area>. Acesso em: 17 abr. 2023.