Aula 10 - Controle de Versão
Apresenta os conceitos relacionados à controle de versão de código e a ferramenta GIT
Controle de Versão
- Gerenciamento do código-fonte
- Contribuições de diferentes programadores
- Desfazer alterações problemáticas
- Resolução de conflitos de código
O Git é um sistema de controle de versão, criado pelo finlandês Linus Torvalds (o mesmo criador do Linux). O sistema Git é utilizado principalmente nos projetos de desenvolvimento de software, sendo capaz de manter a organização das edições de código, além de permitir que diversos pessoas trabalhem simultaneamente em um mesmo projeto.
Windows:
- Faça o download do instalador para windows no [site](https://gitforwindows.org/) do Git.
- Prossiga com a instalação nas opções padrão. Para usuários avançados, há a possibilidade de alterar algumas opções.
- Inicie um Git Bash, recém instalado.
- Execute os seguintes comandos:
$ git config --global user.name "Alan Turing" $ git config --global user.email "alan@turing.com"
GNU/Linux:
- Instale o git a partir do repositório de sua distribuição (ex.: em distribuições debian):
$ sudo apt-get update $ sudo apt-get install git - Prossiga com a instalação nas opções padrão. Para usuários avançados, há a possibilidade de alterar algumas opções.
- Inicie um Git Bash, recém instalado.
- Execute os seguintes comandos a partir do bash:
$ git config --global user.name "Alan Turing" $ git config --global user.email "alan@turing.com"
Os comandos acima configuram o nome e conta de email do usuário que fara contribuições na máquina. Caso compartilhe a máquina com outros usuários, realize a configuração por repositório digitando o mesmo comando sem a opção --global dentro da pasta do repositorio.
Arquitetura do Git

STASH: Área alternativa de armazenamento de alterações.WORKSPACE: Área de trabalho que mantém o estado real/atual de todos os arquivos do projeto.STAGE AREA (INDEX): Área de trabalho intermediária para organização das modificações a serem armazenadas no repositório local através do commit.LOCAL REPOSITORY: Repositório de todas as versões geradas pelo comando commit. Esta área representa o estado mais estável do desenvolvimento.REMOTE REPOSITORY: Repositório remoto que reune as contribuições dos repositórios locais.

UNTRACKED: Arquivo que não está sendo versionado.UNMODIFIED: Arquivo que não foi modificado quando comparado à ultima versão.MODIFIED: Arquivo que foi modificado quando comparado à ultima versão.STAGED: Arquivo alterado que foi adicionado ao INDEX e está pronto para o versionamento.
Operações com Git
Há duas maneiras distintas de iniciar o terminal de comandos do Git:
- Através da interface gráfica, entre na pasta onde deseja criar/abrir o repositório do Git e selecione a opção
Git Bash Here. - Abra a aplicação Git Bash e navegue até a pasta desejada usando o comando
cd [caminho da pasta](Ex.:cd Downloads/pascalzim6031/pascalzin)
Navegando pelo Bash
Para navegar no bash, utilize os seguintes comandos como referência:
cd caminho- Acessa a pasta do caminhols- Mostra arquivos no diretório atualpwd- Mostra o caminho do diretório atual
Para iniciar um novo repositório Git, basta executar os seguintes passos:
- Certifique-se de que está na pasta correta no bash usando o comando
pwdou consultado a barra de título - Execute o comando:
git init
Repare que é possível iniciar um novo repositório em qualquer pasta que não possua um repositório ativo. Isso inclui pastas que já possuem conteúdo.
Para verificar o estado do repositório, utilize o comando:
git statusA saída do comando deve mostrar se há alterações no projeto desde o último commit, incluindo também informações sobre o branch e estado atual dos arquivos modificados
O Git é um sistema de controle de versão, criado pelo finlandês Linus Torvalds (o mesmo criador do Linux). O sistema Git é utilizado principalmente nos projetos de desenvolvimento de software, sendo capaz de manter a organização das edições de código, além de permitir que diversos pessoas trabalhem simultaneamente em um mesmo projeto.
Com as alterações adicionadas à staging area, elas estão prontas para serem efetivas. O comandogit commit torna as alterações persistentes no repositório.
git commit -m "Descrição da alteração"A descrição da alteração é importante para organizar a versão e manter outros programadores cientes de que tipo de alterações foram realizadas naquele commit.
Caso a opção -m não seja inserida, o git deverá abrir o editor de texto principal (variável core.editor da configuração do git), onde um texto mais longo pode ser inserido.
Mais Recursos

Um branch é linha individual de histórico que contém arquivos que podem diferir de outras ramificações.
// Cria um novo branch chamado developer git branch developer // Deleta um branch chamado developer git branch -d developer // Exibe os branchs ativos git branch -a // Altera o branch atual para developer git checkout developer // Cria um branch vazio chamado developer git checkout --orphan developer O comando checkout permite navegar entre branches ou commits de um repositório Git, substituindo os arquivos do workspace atual pelas suas respectivas versões do commit desejado.
O uso do checkout pode ser feito indicando um branch, como neste exemplo:
$ git checkout developerOu usando o hash de um commit, que pode ser consultado pelo comando git log:
$ git log
commit 721f5ae51632203e9df09dfd80ffbe021caa641c
Author: rvenson <ramon.venson@gmail.com>
Date: Fri Sep 25 00:00:00 2020 -0300
First commit
$ git checkout 721f5ae51632203e9df09dfd80ffbe021caa641c
O uso do checkout não pode ser realizado em commits quando temos alguma alteração no workspace atual. Os commits criados a partir do checkout diretamente em um outro commit serão removidos quando o usuário volta ao topo do branch atual
O comando merge é responsável por incorporar as modificações de outro branch.
// Incorpora as modificações do branch developer no master git checkout master git merge developerAo realizar um merge entre dois branches, o git irá unificar todas os commits realizados no branch original, gerando um único commit no branch de destino.
Além do merge, podemos utilizar também o comando rebase que, ao contrário do merge, não gera novos commits no branch destino. Ao usar o git rebase, todos os commits do branch original são adicionados ao destino na mesma ordem em que foram criados.
O comando reset pode ser utilizado para desfazer alterações adicionadas ao índice (reverso do comando add).
git resetAo utilizar este comando, retornamos ao estado inicial do indíce (sem alterar as modificações no workspace). Para retornar todos as modificações realizadas no workspace para o ultimo estado gravado nos commits, podemos usar o seguinte comando:
git reset --hardE por fim, também podemos usar o comando reset para retornar definitivamente ao estado de um commit a partir de seu hash (USE COM MUITO CUIDADO!)
git reset 9f35748df387a1485b14daf98eac9b62a0d544e0 O arquivo .gitignore, geralmente presente na pasta raiz do projeto, é responsável por especificar os arquivos e pastas que não devem ser versionados pelo projeto. Este arquivo é de extrema importância para que arquivos residuais, temporários e builds não sejam integrados ao controle de versão. Para utilizar o gitignore, basta criar um arquivo com este mesmo nome na pasta principal do projeto. Dentro do arquivo, deve-se especificar linha por linha quais arquivos, tipos de arquivos e pastas devem ser recusados pelo git.
# Ignora toda a pasta bin dentro do projeto bin/ # Ignora todos os arquivos com final .import *.import # Ignora o arquivo project.config project.configCada IDE geralmente possui conjunto de arquivos e pastas que podem ser ignoradas, para saber quais são estes arquivos, você pode consultar o site https://www.gitignore.io/ e gerar o arquivo .gitignore padrão.
Guias práticos e interativos:
Operações Remotas
Uma das funções do git é a possibilidade de estender a utilização do repositório git para um endereço remoto, oferecendo um local centralizado para compartilhamento e gerencia do código do projeto.
De maneira inicial, podemos realizar três tipos de operações usando o Git:
- Copiar um repositório (
clone) - Atualizar um repositório local (
fetchepull) - Atualizar um repositório remoto (
push)
Para copiar um projeto git a partir de um endereço remoto, usaremos o comando clone:
git clone https://gitlab.com/rVenson/linguagemdeprogramacao.gitTambém podemos realizar a mesma operação informando o endereço no sistema de arquivo local da máquina
A clonagem de um repositório traz algumas vantagens em relação à cópia feita pelo sistema operacional. Ao realizar o clone, o git faz a configuração dos endereços do repositório remoto, além de permitir uma cópia mais flexível dos dados do repositório remoto.
Ao clonar um repositório remoto, o git configura automaticamente o endereço do projeto. No entanto, para inserir o endereço de repositórios já existentes ou iniciar um novo projeto, é necessário realizar a configuração do endereço manualmente. Para isso, podemos utilizar o comando remote:
git remote add origin https://gitlab.com/rVenson/linguagemdeprogramacao.gitAlém do comando git remote add, que especifica que estamos tentando adicionar um novo endereço de repositório remoto no nosso repositório local, também precisamos passar como parâmetro o apelido (alias) do endereço (por padrão, usamos origin) e o URI do projeto remoto.
Podemos visualizar os repositórios já configurados usando o comando git remote -v.
Para atualizar seu repositório git local com as alterações mais recentes do repositório remoto, podemos utilizar os seguintes comandos:
git fetch: este comando atualiza as referências do projeto local, no entanto, não executa nenhuma mudançagit pull: este comando atualiza as referências do projeto local e executa as mudanças (merge)
Para usar qualquer um dos dois comandos, podemos informar também qual o endereço do repositório remoto (que pode ser o apelido definido, como por exemplo origin) e o branch que estamos trabalhando:
git pull origin master Na via inversa, podemos atualizar o repositório remoto com as alterações do repositório local. Para isso vamos usar o comando push, também declarando o endereço do repositório remoto e o branch que deverá ser atualizado:
git push origin master Mão na Massa
Inicie um novo repositório git local e em seguida:
- Crie um arquivo
README.mdcontendo uma descrição do GIT; - Crie uma pasta chamada
imge insira esta imagem dentro desta pasta; - Realize um novo commit com a descrição
Estado inicial; - Altere o arquivo
README.mde insira a imagem da etapa anterior dentro do arquivo usando desta maneira: - Realize um novo commit com a descrição
Inserida a imagem do git; - Verifique o log usando
git log, compacte a pasta do projeto e envie ao professor
Faça o clone deste repositório https://gitlab.com/rVenson/exercicio_git e em seguida:
- Crie e mova-se para um novo branch para desenvolvimento das alterações chamado
dev - Você deverá realizar duas alterações no projeto, que devem ser efetivadas em dois commits diferentes:
- Adicionar a estilização CSS às páginas
index.htmleprofile.html<link rel="stylesheet" href="style.css"> - Implementar a função
validateUser(), dentro do arquivoindex.js. Essa função deve retornar verdadeiro apenas caso o usuário digitado seja o seu email de estudante da unesc, com a senhasamsepiol. Caso o resultado da validação seja falso, a funçãoshowSnackbar()deve ser chamada com uma mensagem de erro.
- Adicionar a estilização CSS às páginas
- Após realizar os dois commits, retorne ao branch master e aplique à ele as alterações realizadas no branch dev
- Retorne ao branch
deve desfaça apenas o último commit realizado (que deve ser a implementação da validação) - A partir do branch
dev, crie um novo branch chamadoprod - Delete o branch
dev - Mova-se para o branch
prode adicione um novo arquivo chamadoREADME.mdcontendo seu nome - Aplique as alterações realizadas no branch
prodao branchmaster. (Repare que aqui existem diferenças entre usar o comandogit mergeegit rebase)
Exercícios Complementares
Identifique a finalidade dos seguintes comandos:
git initgit config --global user.name "turing"git add EXERCICIO.txtgit add .git commit -m "Adicionado nova interface"git commitgit reset --hard HEADcd Downloadspwdcd ..lsgit pullgit pushgit clone https://gitlab.com/rVenson/meurepositorio
Escolha um repositório disponível no gitlab.com ou github.com e faça a clonagem do mesmo, identificando qual foi o autor do último commit realizado no projeto e a(s) linguagem(s) utilizadas.
Clone o repositório https://gitlab.com/rVenson/unesc-git-exercicios para a máquina local. Crie uma pasta chamada exercicios e dentro dela uma pasta para cada exercícios da disciplina (Ex.: exe01, exe02, exe03...). Em seguida adicione a solução dos exercícios em suas respectivas pastas, junto com um arquivo adicional README.md contendo a definição do exercício.