Introdução ao Git / GitHub

Computação II - Ciência da Computação


Prof.: Danilo S. Carvalho

Nessa aula vamos falar sobre a necessidade de controle de versão do nosso código e sobre como isso pode ser feito com as ferramentas Git e GitHub.


Ao final da aula, estaremos aptos a tornar nossa rotina de desenvolvimento mais prática e segura.

Toda vez que precisamos fazer alguma alteração no código, estamos destruindo parte do código anterior e possivelmente criando problemas que precisarão ser analisados.


Programadores podem cair na tentação de deixar o código anterior comentado como um registro histórico ou "vai que eu preciso usar novamente…"

No pior dos casos, o programador cria vários arquivos com variações de nome, ex: ClasseImportante1(2,3).java.

Gerenciar vários arquivos da mesma base de código manualmente é ineficiente e problemático.

Torna-se inviável para projetos grandes (ex: > 100 arquivos).

Nosso problema pode ser resolvido com um sistema de controle de versão (VCS).

Tal sistema mantém para nós um banco de dados com as diferentes versões do nosso código e outros arquivos (configuração, definições, etc.).

Operamos um VCS típico através de um processo de checkout -- commit -- checkin.

No checkout, copiamos uma versão específica do código para o nosso diretório de trabalho.

No commit, registramos as alterações que fizemos no código, criando assim uma nova versão.

No checkin, enviamos as alterações de volta para o banco de dados onde ficarão guardadas.

Os nomes e comandos para cada uma dessas operações pode ser diferente em cada ferramenta VCS, mas estão sempre presentes.

O banco de dados de versões é sempre chamado de repositório.

Existem dois tipos principais de VCS: centralizado e distribuído.

Em um VCS centralizado, o banco de dados de versões é armazenado em um único lugar, que deve ser acessado por todos que queiram trabalhar com o código.

Nesse tipo de VCS, o programador deve sempre conferir a versão no banco de dados e resolver todos os possíveis conflitos antes do checkin, no caso de mais de uma pessoa editando o mesmo arquivo.

Em um VCS distribuído, há uma cópia do banco de dados para cada programador, e o sistema se encarrega de resolver os conflitos, cada vez que um ou mais programadores desejam sincronizar suas versões.

Cada um dos dois tipos possui suas vantagens e desvantagens.

O tipo centralizado é mais simples, mas mais susceptível a problemas.

O tipo distribuído é mais complexo, entretanto mais robusto.

O git é o sistema de controle de versão mais popular atualmente.

Foi criado para gerenciar o código fonte do kernel Linux.

É um VCS distribuído. Os repositórios git podem ser criados facilmente em praticamente qualquer diretório do sistema de arquivos.

É provável que vários de nós tenhamos o git instalado, pois é parte integrante de algumas distribuições Linux.

Para criar um repositório git basta executar o comando abaixo no terminal:

O diretório onde o comando foi executado passará a ser um diretório de trabalho do git, atrelado ao repositório

Adicionamos arquivos no repositório com git add

Realizamos o commit com git commit. Uma janela do editor de texto padrão será aberta para inserirmos a "mensagem de commit", informando de forma livre o que foi alterado naquela versão.

Todos os arquivos adicionados com git add terão suas alterações verificadas e automaticamente registradas acrescentando a opção -a ao git commit.

                        
                            git init
                        
                    
                        
                            git add <caminho para os arquivos>
                        
                    
                        
                            git commit
                        
                    

O GitHub é o um serviço de repositórios para o git.

Ele combina as vantagens de um VCS distribuído e um centralizado, oferecendo um local único para acesso e sincronização dos repositórios.

É um dos serviços mais utilizados para distribuição de código aberto / livre

Também disponibiliza outras ferramentas e serviços, como wikis.

Quando estamos usando o GitHub (ou outro serviço de repositórios), podemos "clonar" um repositório do serviço, copiando seu conteúdo (banco de dados + diretório de trabalho) para o nosso computador.

Isso é feito com o comando git clone, cujo parâmetro é o endereço (URL) onde se encontra o repositório.

Uma vez que atualizamos a versão de um repositório clonado com o git clone, podemos enviar a nova versão para o GitHub com o comando git push

Caso precisemos atualizar o nosso repositório com a última versão que está no GitHub, usamos o comendo git pull.

                        
                            git clone <endereço do repositório>
                        
                    
                        
                            git push
                        
                    
                        
                            git pull
                        
                    

Sabemos agora como manter o histórico de alterações do nosso código sem torná-lo uma bagunça.


De quebra, ganhamos uma forma de backup remoto simples e confiável.

Todo o código a ser desenvolvido durante as aulas poderá ser acessado no repositório da turma.

Criem e testem seus próprios repositórios localmente e no GitHub.

Perguntas:

  1. O que acontece se duas pessoas editarem o mesmo arquivo no git, fizerem o commit e tentarem sincronizar (git push/pull)?
  2. Quais tipos de arquivos devem ser incluídos no repositório e quais não devem?

Até a próxima aula!