CSE 210: Programação com Classes

S01 - Atividade de Aprendizagem: Controle de Versão

Visão Geral

Esta atividade ajudará você a se familiarizar com sistemas de controle de versão e a usar Git e GitHub.

Material de Preparação

O que é Controle de Versão?

Leia sobre o Git e sistemas de controle de versão na documentação oficial do GitHub:

Não se preocupe muito com os detalhes de todos os comandos mostrados nos exemplos. Você os aprenderá com mais detalhes à medida que praticar abaixo.

Arquivos e Pastas

Antes de poder usar bastante o Git, é importante ter certeza de que você se sente confortável com arquivos e pastas no seu computador.

À medida que você começar a criar programas maiores, não é mais viável manter todo o seu código em um único arquivo. Ao separar seu código em arquivos diferentes, você deve juntar todo o código relacionado a um determinado conceito ou ideia. Esta é outra aplicação do princípio da abstração, que é um conceito fundamental deste curso.

Além dos benefícios cognitivos de não manter milhares de linhas de código no cérebro e rolar por arquivos extremamente longos, separar seu código em vários arquivos também é bem útil quando várias pessoas estão desenvolvendo o programa juntas. Quando pessoas diferentes estão trabalhando em partes separadas do programa, elas não editarão tanto os mesmos arquivos, o que torna a mesclagem das alterações em um sistema de controle de versão ainda mais fácil.

Ao final deste curso, você estará criando programas que usam um número bem grande de arquivos. Isso pode parecer complicado no começo, mas, como você aprenderá, cada um desses arquivos será pequeno e focado em uma ideia, tornando o trabalho com um sistema grande muito mais fácil.

Para se preparar para isso, primeiro você precisará estar familiarizado com a organização geral de arquivos e pastas no seu computador. Depois, você precisará aprender as convenções de como os programas Python são distribuídos em vários arquivos.

Sistema de Arquivos

Todos os dados armazenados no seu computador são armazenados em um sistema de arquivos. Esta é uma estrutura hierárquica de pastas e arquivos.

Uma pasta pode conter vários arquivos e também pode conter outras pastas. A imagem a seguir apresenta uma organização onde a raiz, ou nível mais alto, é uma pasta "home", que contém outras pastas, como "jose" e “maria", e cada delas pode conter outras pastas ou arquivos.

Exemplo de Pasta
Exemplo de Pasta

Você pode navegar pelos arquivos e pastas no seu computador usando um navegador gráfico de arquivos e também pode navegar usando um terminal de linha de comando. Você pode usar um terminal diretamente do seu sistema operacional. Também há uma janela de terminal disponível em editores como o VS Code, onde você pode inserir comandos.

Os comandos específicos podem diferir entre sistemas operacionais, mas geralmente seguem os mesmos princípios. Se você estiver usando o terminal de linha de comando "Git Bash" no Windows, ele permitirá que você use comandos no estilo Linux (usados também pelo MacOS), então esses são os que geralmente serão mostrados nos materiais didáticos.

Atenção! Pastas ou Diretórios?

O nome é pasta ou diretório? Ambos — Você verá que as pessoas usam esses termos de forma intercambiável.

O termo "diretório" era mais comum no mundo dos terminais de linha de comando, mas conforme as pessoas migraram para navegadores de sistemas de arquivos gráficos, elas começaram a usar o termo "pasta". Como programador, você verá ambos os termos e deverá se sentir confortável com eles.

Navegando pelo Sistema de Arquivos

Um princípio importante a ser entendido é que, quando você usa um terminal de linha de comando, você estará realmente "dentro" de um diretório ou pasta específica. Isso é chamado de "diretório de trabalho atual". Você aprende a ver o diretório atual digitando o comando pwd (que significa "print working directory" em inglês, ou exibir diretório de trabalho).

Você pode alterar diretórios usando o comando cd seguido do nome do diretório para o qual deseja alterar. Por exemplo, cd imagens acessa uma pasta abaixo ou dentro da pasta atual, chamada “imagens". Um único ponto . refere-se ao diretório atual, e dois pontos .. referem-se ao diretório primário. Portanto, digitar cd .. mudará para a pasta pai daquela em que você estava.

Exemplo de pasta mostrando cd
Exemplo de pasta mostrando cd
Acessando Arquivos e Pastas

Há duas maneiras de se referir a um local no sistema de arquivos: um caminho absoluto ou completo para o local ou, um caminho relativo que descreve o local em relação ao seu local atual.

Por exemplo, um arquivo pode ter um caminho absoluto de /home/jose/imagens/familia.jpg, e você sempre pode usar esse caminho completo para se referir a ele, mas se você já estiver no diretório /home/jose, você pode se referir a ele como imagens/familia.jpg (ou uma forma equivalente que use a notação de diretório atual com ponto final simples: ./imagens/familia.jpg ). Se você estivesse no diretório /home/jose/documentos e quisesse usar um caminho relativo para encontrar esse arquivo, você poderia usar a notação do diretório pai ../imagens/familia.jpg para primeiro "subir" um diretório e depois ir para o local apropriado.

Exemplo de pasta mostrando caminhos completos e relativos
Caminhos Completos e Relativos
É uma Barra ou Barra Invertida?

A diferença entre a barra / e a barra invertida \ é outra diferença incômoda entre sistemas operacionais que decorre de sua história.

Sistemas baseados em Linux/Unix (incluindo MacOS) usam barra / em seus caminhos e não iniciam caminhos absolutos completos com uma letra de unidade (por exemplo, eles usam /home/jose).

Os sistemas baseados em Windows tendem a usar uma barra invertida \ e começar com uma letra de unidade (por exemplo, eles usam C:\Usuarios\Jose ). Às vezes, os sistemas Windows aceitam o uso da barra, mas o MacOS e o Linux raramente permitem barras inversas.

Usando Git

A seguir, descreveremos como usar o Git no âmbito que você precisará neste curso. Isso é só a ponta do iceberg do que o Git pode fazer. Você terá mais prática com o Git em cursos futuros, onde colaborará com membros do grupo e fará uso de Branching (ramificação) e Merging (mesclagem). Neste curso, nos concentraremos apenas em adicionar, confirmar e enviar código para o GitHub.

Linha de Comando Versus uma Interface Gráfica de Usuário

Ferramentas como o Git foram originalmente criadas como ferramentas de linha de comando. Há também ferramentas e plugins de Interface Gráfica do Usuário (GUI) para a maioria dos editores que tornam fácil e conveniente fazer muitas coisas no Git. Eles são ótimos de usar e podem simplificar seu trabalho de desenvolvimento, mas você também deve aprender a usá-los na linha de comando.

Há alguns motivos muito importantes para aprender a usar o Git na linha de comando. Um deles é que, quando você diz às pessoas que "conhece o Git", como em um currículo ou em uma entrevista, elas presumirão que você tem um conhecimento básico de como usá-lo na linha de comando também. Outra é que, embora as ferramentas GUI sejam muito convenientes quando tudo está em um estado de funcionamento limpo, às vezes acontecem coisas inesperadas. Quando isso acontece, é quase sempre mais fácil fechar a ferramenta GUI, retornar à linha de comando e começar com `git status` e trabalhar a partir daí.

Neste exemplo, você aprenderá ambos.

Criar um Novo Repositório

O primeiro passo para usar o git é criar um novo repositório (ou "repo" para abreviar). Uma maneira de fazer isso é criar o repo no GitHub e depois cloná-lo para o seu computador. (Também é possível criar um diretamente usando git init e depois enviá-lo ao GitHub.)

Nas instruções de configurações do curso, você fez o seguinte:

  1. Criou uma conta no GitHub.com.
  2. Autenticou-se no GitHub.
  3. Criou um novo repositório a partir de um modelo.

Essas etapas ajudaram você a criar seu primeiro repositório hospedado no GitHub.com.

Espere, é Git ou GitHub?

Vale a pena comentar que o Git e o GitHub são diferentes. Git é um programa que nos ajuda a gerenciar versões dos arquivos em nossos projetos. Ele armazena esses arquivos e seu histórico em um repositório (ou "repo" para abreviar). O Git é diferente dos sistemas de controle de versão anteriores a ele, pois nele cada computador armazena uma cópia completa do repositório. Depois, você pode enviar seu repositório para outro computador, que dizer "faça esse ficar parecido com o meu". Ou você pode trazer o repositório de outro computador dizendo: "faça o meu ficar parecido com aquele".

Em vez de ter que enviar e trazer para cada pessoa do seu grupo, podemos configurar um servidor central e fazer com que cada pessoa interaja com ele. É aqui que entra o GitHub. O GitHub nos permite hospedar um repositório em seus servidores e usá-lo como um local central para nossa equipe. Eles também fornecem uma série de outras ferramentas para auxiliar no gerenciamento do repositório. Há vários outros lugares que oferecem essa mesma funcionalidade, mas o GitHub é uma escolha popular que usaremos neste curso.

Clonar o repositório

Depois que seu repositório for criado no GitHub, você poderá obter uma cópia dele no seu computador local com o comando git clone.

Lembre-se de que o repositório contém todos os arquivos do projeto e o histórico completo das alterações feitas neles. Então, quando você clonar esse repositório para seu computador, você terá uma cópia do histórico completo mostrando todas as alterações que todos no seu grupo fizeram.

Nas instruções de configurações do curso, você fez isso quando inseriu a URL do seu repositório e clicou em “Clonar esse Repositório". Em segundo plano, isso executou o comando git clone para você.

Fazendo Alterações

Criar um repositório e cloná-lo para o seu computador só precisa ser feito uma vez no início do projeto. Então esses comandos não são usados com tanta frequência. Depois de configurar tudo, você começará o processo normal de fazer alterações e enviá-las ao GitHub.

Qualquer alteração precisa passar pelas seguintes etapas:

  1. Faça suas alterações.
  2. Adicione-as a uma área de preparação (staging area) onde eles se preparam para o próximo commit (efetivação).
  3. Confirme todas as alterações que foram preparadas.
    • Isso armazena as alterações somente no repositório do seu computador. Elas ainda não estão no GitHub.
  4. Envie seu repositório para o GitHub.
    • Isso envia suas alterações e garante que os dois repositórios (no seu computador e no GitHub) estejam sincronizados.
    • Se você estiver trabalhando com outra pessoa, o Git fará você também "trazer" do GitHub as atualizações do repositório, para garantir que você tenha uma cópia de quaisquer alterações que existam no GitHub mas não no seu computador.
Adicionar Arquivos

Para adicionar um arquivo à área de preparação para que ele possa fazer parte do próximo commit, use o comando git add seguido do nome do arquivo que foi alterado ou criado. Por exemplo:


git add myFile.txt

Se você estiver executando o comando git de uma pasta diferente, é importante especificar o nome completo do arquivo, usando um caminho absoluto ou relativo. Por exemplo:


git add csharp-prep/Prep1/Program.cs

Você também pode especificar um diretório, que adicionará qualquer coisa que tenha sido alterada naquele diretório (ou em quaisquer subdiretórios abaixo dele). Lembrando que o ponto simples . representa o diretório atual, você pode usar uma sintaxe abreviada para adicionar o diretório atual e tudo abaixo dele digitando:


git add .

Se você quiser usar a extensão do VS Code para Git, clique na aba “Controle de Código-Fonte" no menu à esquerda. Isso mostrará todos os arquivos que foram alterados. Você pode clicar no ícone "+" ao lado de qualquer um desses arquivos para adicioná-los à área de preparação para o próximo commit.

Publicação de Arquivos

Quando estiver pronto para dar commit em todos os arquivos que foram preparados, use o comando git commit seguido de uma mensagem de commit. Por exemplo:


git commit -m "Correção dos problemas em que nada era exibido na tela."

É importante escolher uma mensagem que ajude você e seus colegas de equipe a saber por que você fez as alterações, caso precise identificar problemas mais tarde.

Na verdade, deixar uma mensagem é tão importante que o Git não permitirá que você faça um commit sem uma mensagem.

Se você estiver usando a extensão VS Code para Git, na aba “Controle de Código-Fonte" no menu esquerdo, há uma caixa para você digitar sua mensagem, então você pode clicar no botão de commit.

Coisas a serem observadas: Esquecer seu comentário

Se você esquecer de incluir uma mensagem de commit, o Git o levará a um editor de texto para digitar uma. Na maioria dos sistemas, isso levará você a um editor chamado vim por padrão. Este pode ou não ser seu editor favorito. Se você simplesmente quiser sair, pressione a tecla Escape algumas vezes e digite :q! (O : indica que você está digitando um comando, enquanto q indica que você quer sair e ! indica que você não está preocupado em salvar alterações).

Isso ajudará você a sair do editor. Você pode então executar o comando commit novamente, desta vez com -m para sua mensagem.

Enviar alterações para o GitHub

Depois de enviar suas alterações para seu repositório local, você pode enviá-las para o GitHub usando o comando git push. Por exemplo:


git push origin main

Neste exemplo, "origin" é o nome do servidor remoto, e a palavra "origin" é uma convenção para seu servidor principal. A palavra "main" é o branch (uma ramificação) para o qual você gostaria de enviar caso esteja tentando manter certas alterações separadas umas das outras. Neste semestre, sempre usaremos "origin" e "main". E, de fato, quando você clona um repositório do GitHub, eles serão definidos como padrões, então se você quiser usá-los, você só precisa digitar:


git push

Se você estiver usando a extensão VS Code para Git, na aba “Controle de Código-Fonte" no lado esquerdo, depois de confirmar suas alterações, você pode clicar no botão "Sync Changes" ou, alternativamente, você pode clicar nos três pontos e selecionar “Enviar por Push".

Ao sincronizar, ele verificará se há alterações feitas no GitHub, trará essas alterações e, em seguida, enviará as que foram feitas no seu computador. Como você é o único trabalhando no seu projeto, provavelmente não precisará fazer nenhuma alteração.

Verificar o status do seu repositório

Um dos comandos Git mais úteis é git status. Ele informará o status atual dos seus arquivos e repositórios e exibirá comandos que você pode querer executar (como por exemplo para desfazer um arquivo preparado etc.).

Quando tudo está funcionando perfeitamente, os comandos acima ou o uso da extensão do VS Code funcionam muito bem. Mas, se algo fora do comum acontecer, git status pode ser muito útil para entender o que aconteceu e o que fazer a seguir.

Fluxo de trabalho típico

O processo típico para trabalhar em seu programa é alterar arquivos, adicioná-los, fazer commit das alterações e, então, enviá-las ao GitHub. O vídeo a seguir mostra isso em ação:

Link Direto: ▶️Um Fluxo de Trabalho Típico com Git

Instruções da Tarefa

Pratique o trabalho com o Git fazendo o seguinte:

  1. Abra a pasta do projeto do seu curso no VS Code.
  2. Faça uma alteração no arquivo README.md, como adicionar seu nome ou remover a linha que diz "Este é o código inicial".
  3. Adicione suas alterações à área de preparação.
  4. Faça commit de seus arquivos preparados para seu repositório local.
  5. Envie suas alterações para o GitHub.
  6. Em um navegador da Web, acesse GitHub.com e verifique se você consegue ver suas alterações no arquivo README.md.

Instruções de Envio

Após terminar a tarefa, retorne ao Canvas para responder ao questionário e relatar seu progresso.

Obtendo Ajuda

Trabalhar com uma nova ferramenta e processo pode ser difícil. Você usará o Git durante todo o semestre e, com a prática, ficará muito mais confortável com ele.

Se você tiver problemas com qualquer uma das etapas desta tarefa, lembre-se de postar perguntas no Microsoft Teams, onde você pode receber ajuda dos seus colegas.