Versionamento

Role para baixo

Desafio 3

Depois de instalar o Git, você praticou os comandos básicos, como publicar no repositório remoto e ignorar arquivos.

Nesta etapa, para desenvolver o desafio 3, você deverá:

  • Realizar a conciliação de alterações em um mesmo repositório.

Para isso, você estudará os seguintes conteúdos:

  • Branchs e tags
  • Correção de erros
  • Boas práticas

Trabalho de equipe

Um dos pontos importantes do Git é a sua flexibilidade de trabalho, seja para realizar um trabalho individual, em equipes pequenas ou grandes. Por meio do versionamento e rastreamento, é possível trabalharmos de maneira paralela em tarefas distintas e entregarmos itens de modo mais rápido durante o processo. Para trabalhar várias tarefas e trechos de códigos simultaneamente, usamos branch e trunk.

Clique no player a seguir e assista ao vídeo que explica o que são trunk e branch.

Trunk e branch

No primeiro e no segundo desafio, todas as alterações estavam sendo feitas no mesmo ramo de trabalho. Agora, depois de conhecer os termos trunk e branch, você conhecerá mais a fundo o que acontece quando vários programadores editam o mesmo arquivo.

Considerando um determinado ponto do código-fonte, nós podemos criar uma cópia desse trabalho e atuarmos nas tarefas de maneira paralela.

O que isso significa na prática?

Na prática, para cada atividade que formos executar, atuaremos em um ramo distinto e, posteriormente, uniremos o trabalho dos ramos com o tronco principal.

Tela 1

Clonando um repositório

No desafio 2, você criou uma pasta chamada senai-versoes-colaboracoes. Nessa pasta, o repositório foi criado e todo o versionamento de código foi feito.

Para darmos continuidade ao nosso processo, devemos garantir que todas as informações estão atualizadas com o repositório remoto. Para isso, podemos usar dois comandos:

  • git pull: para baixar as atualizações do repositório remoto; ou
  • git clone: para clonar a pasta do repositório remoto.

git pull: para baixar as atualizações do repositório remoto

Você já praticou esse comando antes, basta repetir os mesmos passos.

Abra a pasta do repositório local (no nosso exemplo, senai-versoes-colaboracoes), clique com o botão direito do mouse na área em branco dentro da pasta e inicialize o Git Bash clicando em Git Bash Here. O terminal abrirá e você pode digitar o comando git pull.

DVCS

git clone: para clonar a pasta do repositório remoto

Caso você não tenha o repositório/pasta em seu computador, você pode clonar (copiar) o conteúdo do repositório remoto em sua máquina local.

Clique nas abas de navegação para ver o passo a passo da clonagem.

● Acesse o repositório remoto através do link "github.com/seu-usuário". No nosso exemplo, o link é "http://github.com/
hstrada
".

Clique em "repositories".

Tela 1

● Clique no repositório do desafio 2. No nosso exemplo, "senai-versoes-colaboracoes".

Tela 1

● Clique em "code" e copie a URL do repositório.

Tela 1

● Em sua pasta local .git, abra o Git bash, clicando com o botão direito do mouse.

No terminal, digite o comando git clone "https://github.com/hstrada/senai-versoes-colaboracoes.git"

Tela 1

● No desafio 2, você "empurrou" git pull as informações da sua máquina local para o repositório remoto. Aqui você está copiando as informações do repositório remoto para a sua máquina.

Tela 1

Criando uma branch

Com o repositório atualizado e com as informações do tronco principal também atualizadas, inicie a criação do primeiro ramo de trabalho.

Considerando um determinado ponto do código-fonte, nós podemos criar uma cópia desse trabalho e atuarmos nas tarefas de maneira paralela.

Para isso, os passos serão:

  • criar uma branch com git checkout -b tarefa/minha-primeira-branch;
  • fazer uma alteração nessa branch;
  • verificar no repositório remoto.

git checkout -b tarefa/minha-primeira-branch: criar uma branch

Para realizar esta ação, dentro do repositório local senai-versoes-colaboracoes, digite o comando git checkout -b tarefa/minha-primeira-branch no terminal.

O parâmetro "–b" é utilizado para informar que desejamos criar uma branch e que esse ramo ainda não existe.

Note que o ramo de trabalho mudou, passando do principal master para a branch criada, chamado "tarefa/minha-primeira-branch"

DVCS

O esquema a seguir resume a criação da nova branch.

DVCS

Importante

A partir deste momento, todas as alterações realizadas estarão na branch, ou seja, no ramo criado, e não mais no tronco (trunk) principal e não impactarão diretamente no ponto principal do nosso código-fonte.

fazer uma alteração nessa branch

Estamos na branch criada. Isso significa que as alterações feitas irão acontecer nesse ramo. Vamos praticar alterando o arquivo README.md e depois verificando no repositório remoto.

Clique nas abas de navegação para acompanhar como alterar o arquivo "README.md".

● Na pasta senai-versoes-colaboracoes, abra o README.md com o bloco de notas. Adicione o comentário: "lembrei do comando: git status" e salve-o.

Tela 1

● Agora abra o terminal do Git Bash, clicando com o botão direito dentro da pasta "senai-versoes-colaboracoes".

Veja a alteração com o git status, adicione esse arquivo na área de staging com git add . e faça o commit com o git commit –m "comentário".

Tela 1

● Agora "empurre" a alteração para o repositório remoto com o git push. Como não estamos na master, lembre-se de digitar o comando completo git push origin tarefa/minha-primeira-branch.

As alterações estão sendo feitas no ramo criado, não impactando o ramo principal, como veremos a seguir.

Tela 1

verificar repositório remoto

Agora vamos verificar no repositório remoto a alteração. Você vai perceber que as alterações no ramo principal de trabalho, que mantém nosso código-fonte, não foram alteradas.

Clique nas setas de navegação para ver o procedimento.

  • Em seu navegador, acesse o repositório remoto através do link "https://github.com/seu-usuário/respositorio-remoto. No nosso exemplo, "https://github.com/
    hstrada/senai-versoes-colaboracoes
    ".
    Note que não há alterações na master.
Tela 1

● Clique no menu ao lado de "master" para visualizar os ramos.

Tela 1

Importante

Nenhuma alteração feita na branch criada impactou diretamente a base do projeto (a master).

Dentro de um projeto, para cada tarefa, geralmente é criada uma branch. Assim, o andamento de cada tarefa não impacta o desenvolvimento do ramo principal nem outros arquivo da equipe.

Criando outras branchs

Como há outras pessoas na equipe trabalhando com o mesmo código-fonte da master, há a necessidade de criar uma branch para cada tarefa. Assim, cada um pode adicionar suas informações no mesmo arquivo sem afetar o desenvolvimento das tarefas de outros colegas.

Novas branchs também devem ser criadas, caso você queira testar duas soluções diferentes para a mesma tarefa ou caso você tenha mais de uma tarefa para solucionar.

Para criar novas branchs, vamos:

  • voltar para a master com git checkout master;
  • criar uma nova branch com git checkout -b exemplo-branch;
  • fazer uma alteração nessa branch;
  • verificar no repositório remoto.

voltar para a master com git checkout master

O primeiro passo para criar uma nova branch é voltar para a master com o comando git checkout master.

DVCS

Dica

O comando para criar uma nova branch é git checkout –b “nome da branch”, lembra-se? E o parâmetro –b indica a criação de uma nova branch.

Quando voltamos para a trunk (chamada master), usamos também o comando git checkout, mas não é necessário informar o parâmetro –b, pois a trunk já existe.

criar uma nova branch com git checkout -b exemplo-branch

Vamos retomar o comando para criar uma nova branch, mudando apenas o nome. Portanto, o comando que devemos digitar no terminal é git checkout –b exemplo-branch.

DVCS

fazer uma alteração nessa branch

Agora estamos na branch exemplo-branch e, portanto, as alterações feitas aqui não afetarão nem a master nem a tarefa/minha-primeira-branch.

Clique nas abas de navegação para ver como alterar o arquivo "README.md" nesta branch.

● Abra o arquivo "README.md".
Note que as alterações feitas na branch tarefa não estão presentes aqui, pois criamos a branch exemplo a partir da master. As alterações da branch tarefa não afetam a master.

Tela 1

● Edite o "README.md" com o bloco de notas, escrevendo "lembrei do comando: git commit" e salve-o.

Tela 1

● Abra o terminal do Git Bash (botão direito dentro da pasta) e execute:

git add . (adiciona ao staging);

git commit –m "adicionando o comando git commit" (salva no histórico);

git push origin exemplo-branch (envia para o repositório remoto).

Tela 1

● O fluxo atual de ramos está como a imagem ao lado.

As tarefas feitas separadamente em cada branch podem ser unificadas depois.

Tela 1

verificar no repositório remoto

Acesse o repositório remoto no seu navegador, com o link "https://github.com/seu-usuário/repositorio-remoto" (no nosso exemplo "https://github.com/hstrada/senai-versoes-colaboracoes").

Verifique as três branchs que existem no projeto. A master com a base estável do projeto e duas branchs de “trabalho em desenvolvimento dos colaboradores”.

DVCS

Unificando os ramos

Você criou duas branchs com dois conteúdos distintos, pois cada uma tem uma atualização diferente do mesmo arquivo. O Git fornece recursos para unificação desse trabalho.

Agora estamos na branch exemplo e vamos unificar o conteúdo com o da branch tarefa em um mesmo ramo de trabalho.

Você pode realizar esta ação por meio de dois comandos distintos:

  • Realizar o download das informações fornecidas pela outra branch, com git pull origin tarefa/minha-primeira-branch; ou
  • Fazer a mesclagem com a outra branch, com git merge tarefa/minha-primeira-branch.

Pense nisso...

Lembre-se que fizemos alterações no mesmo arquivo em cada branch. O que vai ocorrer?

Resolvendo conflitos

Imagine que, como você, os outros membros da equipe estão desenvolvendo suas tarefas em suas respectivas branchs. Em algum momento, todos os ramos serão unificados para que o trabalho possa ser entregue em um único arquivo. Como ajustar os conflitos nessa unificação?

No nosso exemplo, ajustamos o mesmo ponto do arquivo em duas branchs separadas e o Git nos informa que existe um conflito entre as alterações.

Você poderá visualizar algo como a imagem a seguir, com:

comando1.
execução do comando2.
aviso de conflito e local de conflito3.
aviso de falha na execução do comando4.

DVCS

O que é necessário ser feito é informar qual das atualizações nós desejamos manter em nosso arquivo.

Existem três maneiras básicas de resolver:

  1. Incluir somente a sua alteração local.
  2. Aceitar somente o que a outra branch alterou.
  3. Aceitar as duas alterações.

Nesse exemplo, vamos optar pela terceira maneira.
Clique nas setas de navegação para ver como corrigir o conflito.

● Abra o arquivo "README.md".

Note o aviso marcando o conflito no arquivo.

Tela 1

● Remova os conflitos existentes e salve o arquivo.

Tela 1

● Abra o terminal no seu repositório local e:

» adicione o arquivo para a área de preparo;

» faça o commit; e

» publique no repositório remoto.

Tela 1

Para visualizarmos que ambas as alterações de dois ramos distintos foram unidas, vamos abrir o "github.com" em nosso repositório e visualizar as modificações em nossa branch.

Tela 1

DICA

É possível criar uma nova branch a partir de outra branch, basta não voltar para a trunk ao criar um novo ramo. Porém, devemos ter atenção extra para fazer o merge em ramificações distantes da trunk.

SAIBA MAIS...

Existem algumas ferramentas que podem nos auxiliar na visualização de conflitos, como o Git GUI com o meld. Para saber mais, clique aqui e continue a pesquisar e estudar.

Demarcando pontos no código: Tags

Quando desenvolvemos projetos maiores e adicionamos novas tarefas, podemos demarcar pontos no decorrer do desenvolvimento do código que representa, por exemplo, a inclusão de uma tarefa ou um item crucial que foi resolvido.

Essa marcação é chamada de tag e é importante para delimitar pontos estratégicos, como commits que formam o contexto na nossa aplicação.

Importante

Ao demarcar um ponto com uma tag na master, por exemplo, todo o código-fonte até ali é automaticamente compactado num arquivo dentro daquela tag. Se a tag for criada em uma branch, o código compactado será da branch, desde a sua criação até o ponto demarcado pela tag.

Para exemplificar, vamos criar uma tag na master no ponto atual, pelo terminal em seu repositório local.
Clique nas abas de navegação para acompanhar o passo a passo.

● No terminal do seu repositório local, crie uma tag para marcar o ponto atual com o comando git tag –a v1.0 –m "minha primeira tag".

Tela 1

● Para ver as tags criadas, execute o comando git tag.

Tela 1

● Para ver informações sobre uma tag específica, como a v1.0, digite o comando git show v1.0.

Tela 1

● Vamos "empurrar", ou seja, publicar as tags no repositório remoto com o comando git push origin --tags.

Tela 1

● Agora acesse o repositório remoto pelo seu navegador. No github, encontre a tag criada e publicada.

Tela 1

● Clique em releases para ter acesso às informações que foram adicionadas a esse ponto atual de nosso código.

Tela 1

● Clique em v1.0 para visualizar o que está na tag.

Tela 1

Importante

Como comentamos sobre as tarefas desenvolvidas em todos os commits até a tag criada de identificação, os arquivos compactados são entregas/lançamentos parciais que irão compor o nosso projeto ao longo do tempo.

Vamos Praticar

1. Selecione a alternativa correta. Qual o nome do tronco principal em que é mantido nosso código-fonte?

  1. branch
  2. trunk
  3. git push
  4. Product Backlog
  5. Sprint

Atenção

Selecione uma alternativa.

Parabéns! Resposta correta.

O tronco principal que contém nosso código-fonte é chamado de trunk ou master.

Ops! Tente novamente.

Retorne ao conteúdo e veja o vídeo em Trabalho de Equipe.

Ops! Resposta incorreta.

O tronco principal que contém nosso código-fonte é chamado de trunk ou master.

2. Assinale verdadeiro ou falso. O tronco paralelo em que podemos atuar de maneira complementar pode ser chamado de:

  1. trunk
  2. Verdadeiro

      Falso

  3. branch
  4. Verdadeiro

      Falso

  5. tag
  6. Verdadeiro

      Falso

  7. Ramo
  8. Verdadeiro

      Falso

3. Associe corretamente a ação ao respectivo comando.

a. Retorna ao tronco principal.
b. Cria uma nova branch.
c. Publica a branch no repositório remoto.
d. Mescla a branch atual com a branch referida.

4. Selecione a alternativa correta. Qual o comando utilizado para criar uma tag?

  1. git tag
  2. git push origin --tags
  3. git show <nome da tag>
  4. git tag -a <nome da tag> -m <comentário>

Atenção

Selecione uma alternativa.

Parabéns! Resposta correta.

O comando utilizado para criar uma tag é o git tag -a <nome da tag> -m <comentário>.

Ops! Tente novamente.

Retorne ao conteúdo e veja o vídeo em Trabalho de Equipe.

Ops! Resposta incorreta.

O comando utilizado para criar uma tag é o git tag -a <nome da tag> -m <comentário>.

Atenção

Selecione todas as alternativas.

Parabéns! Respostas corretas.

Você relacionou corretamente cada um dos comandos citados.

Ops! Tente novamente.

Retorne ao conteúdo e estude com atenção os tópicos criando uma nova branch e unificando os ramos.

Ops! Resposta incorreta.

As respostas corretas são:

a. git checkout master

b. git checkout –b nome-branch

c. git push origin nome-branch

d. git merge origin nome-branch

Atenção

Selecione uma alternativa.

Parabéns! Respostas corretas.

O tronco paralelo no qual podemos atuar de maneira complementar pode ser chamado de branch ou ramo.

Ops! Tente novamente!

Retorne ao conteúdo e estude com atenção os conceitos do tópico Trabalho em equipe.

Ops! Resposta incorreta.

As alternativas b e d são verdadeiras. O tronco paralelo no qual podemos atuar de maneira complementar pode ser chamado de branch ou ramo.

Atenção

Selecione todas as alternativas.

Parabéns! Respostas corretas.

Você relacionou corretamente cada uma das etapas da metodologia Design Thinking.

Ops! Resposta incorreta. Tente novamente!

Retorne ao conteúdo e estude com atenção cada etapa da metodologia Design Thinking.

Ops! Resposta incorreta.

Examine cada uma das etapas da metodologia Design Thinking.

Neste desafio...

Versionamento | Desafio 3

Você conheceu melhor os termos trunk e branch. Estudou como criar novas branchs e como unificá-las quando necessário, além de praticar a criação de tags.

Os desenvolvimentos colaborativo e paralelo são itens muito importantes durante a sua carreira como programador, permitindo-lhe atuar em diferentes tarefas, aumentar a capacidade de entrega, formalizar o processo de desenvolvimento, além de centralizar as informações que são necessárias no projeto.

Para concluir...

Parabéns, você chegou ao fim do conteúdo de Versionamento!

Durante seus estudos, você percebeu que salvar o progresso do seu trabalho em versões do seu arquivo é muito importante e que fazer o controle manual dessas versões pode ser impossível. Portanto, um sistema de controle de versionamento é essencial para o desenvolvimento de seu trabalho e da sua equipe.

Dentre os diversos sistemas de controle de versionamento e plataformas de publicação online, foram escolhidos o Git (chamado de Git Bash, na versão para os sistemas operacionais Windows) e o GitHub. Baseado nessas escolhas, você conheceu e praticou comandos básicos, como salvar e publicar alterações, além de criar branchs e tags. Estudou também como unificar branchs e resolver conflitos na mesclagem.

Continue estudando e praticando, sempre!

Bom trabalho e até breve!

   REFERÊNCIAS
   CRÉDITOS

REFERÊNCIAS

ATLASSIAN. Git Bash. Disponível em: <https://www.atlassian.com/br/git/tutorials/git-bash>. Acesso em: 22 jan. 2021.

ATLASSIAN. O que é controle de versão. Disponível em: <https://www.atlassian.com/br/git/tutorials/what-is-version-control>. Acesso em: 22 jan. 2021.

BURGDORF, Christoph. The anatomy of a Git commit. 18 nov. 2014. em: <https://blog.thoughtram.io/git/2014/11/18/the-anatomy-of-a-git-commit.html>. Acesso em: 22 jan. 2021.

DEVMEDIA. O que é controle de versão? Disponível em: <https://www.devmedia.com.br/sistemas-de-controle-de-versao/24574#:~:text=Atualmente%2C%20os%20sistemas%20de%20controle,
baseados%20na%20arquitetura%20cliente%2Dservidor>. Acesso em: 22 jan. 2021.

ESTEVES, Raul. Como fazer um README.md bonitão. 29 ago. 2018. Disponível em: <https://medium.com/@raullesteves/github-como-fazer-um-readme-md-bonit%C3%A3o-c85c8f154f8>. Acesso em: 22 jan. 2021.

GIT. Download. Disponível em: <https://git-scm.com/downloads>. Acesso em: 22 jan. 2021.

GITHUB GIST. Fórum. installing Meld. Disponível em: <https://gist.github.com/kjlubick/5a49a3ae5f39ae359997>. Acesso em: 22 jan. 2021.

GITHUB. Site. Disponível em: <https://github.com/>. Acesso em: 22 jan. 2021.

INFOESCOLA. Sistema de informação centralizado. Disponível em: <https://www.infoescola.com/informatica/sistema-de-informacao-centralizado/>. Acesso em: 22 jan. 2021.

MARINHO, Thiago. O que é README e porque ele é tão importante. Disponível em: <https://blog.rocketseat.com.br/o-que-e-readme-e-porque-e-tao-importante/>. Acesso em: 22 jan. 2021.

PINHEIRO, Fagner. Criando um README para seu perfil do GitHub. 26 de ago. de 2020. Disponível em: <https://www.treinaweb.com.br/blog/criando-um-readme-para-seu-perfil-do-github/>. Acesso em: 22 jan. 2021.

ROCKETSEAT. Como usar Git e Github na prática: Guia para iniciantes. Mayk Brito. Vídeo, 33’43”. 27 ago. 2019. Disponível em: <https://www.youtube.com/watch?t=274&v=2alg7MQ6_sI&feature=youtu.be>. Acesso em: 22 jan. 2021.

TED. David Keller. Como construir sua confiança criativa. 11’46”. Disponível em: <https://www.youtube.com/watch?v=16p9YRF0l-g>. Acesso em: 29 de dez. de 2020.

Orientações de Navegação

Veja abaixo as orientações de como navegar pelo curso.

No topo da página é exibido o nome do desafio.

Indicador de progresso da aula.

Acesso aos principais recursos da página.

Direciona ao início do primeiro desafio.

Menu com a relação das seções do desafio.

Exibe as orientações de navegação.

Aumenta ou diminui o tamanho da fonte.

Exibe a tela de glossário da unidade.

Ajusta o contraste da tela.

Exibe a tela de créditos do curso.

Orientações para os exercícios:

Os exercícios contidos nos desafios do curso não fazem parte da composição da nota.
Para refazer os exercícios, atualize a página clicando no ícone      ao lado da barra de endereço do navegador ou pressione a tecla F5.

Título da seção

Buscar outra seção dentro do desafio

Glossáriospellcheck

Branch: ramo ou ramificação do tronco principal.

Bugs: falhas no software ou hardware.

Código-fonte: linhas de programação desenvolvidas em um software em sua forma original; são as instruções que geram o resultado para o usuário, como uma receita do bolo.

Commit: salvar as alterações no repositório.

Incrementos: crescimentos e adições ao seu próprio arquivo, projeto, que esteja sendo construído.

Informações sensíveis: informações que possam identificar a empresa ou o próprio projeto.

Prompt: janela na qual são digitadas as linhas de comando.

Repositório: local de armazenamento virtual, também conhecida por pasta ou diretório, para projetos.

Trunk: também chamado de master, é o tronco principal do projeto e contém o código-fonte.

Créditos

CONFEDERAÇÃO NACIONAL DA INDÚSTRIA – CNI


Robson Braga de Andrade

Presidente

DIRETORIA DE EDUCAÇÃO E TECNOLOGIA – DIRET


Rafael Esmeraldo Lucchesi Ramacciotti

Diretor de Educação e Tecnologia

SERVIÇO NACIONAL DE APRENDIZAGEM INDUSTRIAL – SENAI – CONSELHO NACIONAL


Robson Braga de Andrade

Presidente

SENAI – DEPARTAMENTO NACIONAL


Rafael Esmeraldo Lucchesi Ramacciotti

Diretor-Geral

Gustavo Leal Sales Filho

Diretor de Operações

SENAI – DEPARTAMENTO NACIONAL

UNIDADE DE EDUCAÇÃO PROFISSIONAL E TECNOLÓGICA – UNIEP

Felipe Esteves Morgado

Gerente Executivo

Luiz Eduardo Leão

Gerente de Tecnologias Educacionais

Anna Christina Theodora Aun de Azevedo Nascimento

Adriana Barufaldi

Bianca Starling Rosauro de Almeida

Laise Caldeira Pedroso

Coordenação Geral de Desenvolvimento dos Recursos Didáticos Nacionais

Senai - Departamento Regional de São Paulo


Ricardo Figueiredo Terra

Diretor Regional

Cassia Regina Souza da Cruz

Gerente de Educação

Izabel Rego de Andrade

Supervisora do Centro SENAI de Tecnologias Educacionais

Claudia Baroni Savini Ferreira

Coordenação do Desenvolvimento do Curso

Helena Strada Franco de Souza

Elaboração de Conteúdo

Adilson Moreira Damasceno

Orientador de Práticas de Educação a Distância

Paula Cristina Bataglia Buratini​

Coordenação da Produção do Curso

Cristina Yurie Takahashi​

Design Educacional

Cleriston Ribeiro de Azevedo​

Fabiano José de Moura

Juliana Rumi Fujishima

Ilustrações

Camila Ciarini Dias

Produção e Edição de Vídeos

Aldo Toma Junior

Web Design

Rafael Santiago Apolinário

Programação

Aviso

Parece que você já iniciou o curso, você pode: