wDonadelli



O Básico do Git/GitHub

Utilizando os comandos básicos do Git e GitHub

3 de dezembro de 2020

O propósito deste artigo é descrever alguns comandos básicos do Git e sua integração com o GitHub.

Segundo o sítio https://git-scm.com/, em 03/12/2020:

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Git is easy to learn and has a tiny footprint with lightning fast performance. It outclasses SCM tools like Subversion, CVS, Perforce, and ClearCase with features like cheap local branching, convenient staging areas, and multiple workflows.
Git é um sistema de controle de versão distribuído gratuito e de código aberto projetado para lidar com tudo, desde projetos pequenos a muito grandes com velocidade e eficiência.
Git é fácil de aprender e ocupa uma área pequena com desempenho extremamente rápido. Ele supera as ferramentas SCM como Subversion, CVS, Perforce e ClearCase com recursos como ramificação local barata, áreas de preparação convenientes e vários fluxos de trabalho. (por Google Tradutor)

Segundo a Wikipédia sobre o GitHub em 03/12/2020:

GitHub é uma plataforma de hospedagem de código-fonte e arquivos com controle de versão usando o Git. Ele permite que programadores, utilitários ou qualquer usuário cadastrado na plataforma contribuam em projetos privados e/ou Open Source de qualquer lugar do mundo. GitHub é amplamente utilizado por programadores para divulgação de seus trabalhos ou para que outros programadores contribuam com o projeto, além de promover fácil comunicação através de recursos que relatam problemas ou mesclam repositórios remotos (issues, pull request).

Este artigo não descreve todas as formas de trabalhar com a ferramenta e nem todas suas funcionalidades, versa apenas sobre algumas das maneiras de se trabalhar com ela. Acesse GitHub Docs e Git Book para mais informações sobre como usar adequadamente as aplicações (recomendado).

Primeiros Passos

As duas primeiras coisas a se fazer para utilizar o Git e o GitHub são instalar a aplicação na sua estação de trabalho e criar uma conta no sítio https://github.com/, respectivamente.

A instalação do Git no computador depende do seu sistema operacional. Verifique se a loja de aplicativos do sistema operacional oferece o sistema para instalação ou veja as orientações em https://git-scm.com/downloads. Com o Ubuntu 20.04 LTS, basta executar:

sudo apt install git

Com a conta do GitHub realizada, o endereço do seu perfil será https://github.com/usuario, onde usuario é o seu identificador no GitHub.

Criando o Repositório no GitHub

Para iniciar um novo projeto no GitHub é preciso criar um repositório. Caso tenha dúvida em como proceder, observe as orientações da própria aplicação. Após criado o repositório, seu endereço será https://github.com/usuario/diretorio, onde diretorio é o identificador do repositório no GitHub.

Neste artigo, REPOSITÓRIO e DIRETÓRIO serão sinônimos, já que o repositório no GitHub será um diretório na estação de trabalho

Pode ser interessante criar primeiro o diretório no GitHub e não diretamente no git (git init), pois a aplicação web te guiará no processo de criação e te oferecerá opções úteis ao seu projeto, como os arquivos README.md, LICENSE e .gitignore.

O arquivo README.md, que utiliza a marcação markdown, é o responsável por fazer a apresentação do seu projeto no GitHub. Faça uma boa apresentação para demonstrar o objetivo do projeto, sua aplicação, a linguagem utilizada, a Home Page, o manual... O GitHub oferece algumas ferramentas interessantes para complementar seu projeto, como o wiki, que possibilita a construção de um guia/manual do seu projeto, por exemplo, e o gh-pages, que permite a construção de uma página personalizada (estática) para seu projeto, dentre outras.

O arquivo LICENSE diz respeito à licença do seu projeto. Se quiser que alguém utilize sua ideia, é preciso dar permissão e dizer como ela ocorrerá. Procure saber um pouco a respeito.

O arquivo .gitignore é um arquivo interessante a depender da linguagem de programação escolhida. Ao rodar/compilar sua aplicação, alguns arquivos auxiliares, de log ou aqueles que são criados automaticamente pelo compilador/intepretador, serão ignorados por intermédio dessa configuração e não serão considerados no seu diretório GitHub, deixando-o limpo e organizado.

Clonando o Diretório com o Git

Após a criação do diretório no GitHub, é hora de cloná-lo no sua estação de trabalho, pois é nela que o desenvolvimento ocorrerá (mais coerente, mas não impeditivo). Para isso, entra em cena o Git.

Todos os comandos aqui demonstrados foram executados numa interface CLI com o uso de um terminal. No caso, foi utilizado o terminal padrão do Ubuntu 20.04 LTS. Caso ache mais confortável utilizar uma interface GUI, verifique na sua loja de aplicativos se há alguma disponível.

Crie um diretório no computador para clonar seus projetos e acesse-o:

#criando o diretório
mkdir projetos/

#acessando o diretório
cd projetos/

Para efetuar a clonagem do diretório do GitHub na estação de trabalho, execute o seguinte comando, observando o identificador real do usuário e do diretório no GitHub:

git clone https://github.com/usuario/diretorio.git

Acesse o diretório clonado para iniciar os trabalhos:

cd diretorio/

Ramificações

O Git trabalha com o conceito de ramificações, os chamados branch.

O ramo principal, chamado de master ou main, é o local onde a versão apta para o consumo deve ficar.

Exceto se seu projeto já estiver pronto, não será no ramo principal que irás trabalhar, será necessário criar um novo ramo para que o projeto seja construído ou atualizado. Para criar um novo ramo, execute o seguinte comando:

git branch novoRamo

Tente nomeá-lo de forma a representar o que o ramo significa (e.g. criarCaixaDialogo), é mais interessante para se organizar e trabalhar em grupo. Para navegar entre os diferentes ramos, utilize o seguinte comando:

git checkout nomeRamo

Outra alternativa é usar o comando abaixo, que cria e acessa o ramo na sequência:

git checkout -b novoRamo

Dentro da estação de trabalho, os diferentes ramos serão acessados a partir do mesmo diretório, mas, ao mudar de ramo, os arquivos corresponderão àqueles contidos no respectivo ramo. Ou seja, se no ramo 1 há três arquivos e no ramo 2 quatro arquivos, ao mudar de ramo no Git os arquivos dentro do diretório se modificarão de acordo com o ramo escolhido. Portanto, se estiver no ramo 1, três arquivos serão exibidos no diretório com seus respectivos conteúdos, e, se estiver no ramo 2, quatro arquivos serão exibidos com seus respectivos conteúdos.

Um comando muito importante e que deverá ser utilizado com frequência é o abaixo demonstrado:

git status

Esse comando te informará sobre o ramo que estás a trabalhar além de trazer informações importantes sobre o atual estado do ramo. Execute-o sem restrições antes de fazer qualquer modificação, ele te orientará quando as coisas ficarem nebulosas.

Fazendo Alterações

Uma vez dentro do ramo criado para construção/atualização do projeto, é hora de trabalhar.

Ao criar/alterar o conteúdo do seu projeto, é possível registrar as alterações parciais de modo a salvá-las, além de ser possível tecer comentários sobre cada atualização efetuada.

Primeiro é preciso adicionar sua atualização ao ramo. Há duas formas de se fazer isso, individualmente (por arquivo), ou generalizada (todos os arquivos). Os comandos abaixo exibem essas duas formas:

#Individualmente
git add arquivo

#Generalizada
git add *

O git retornará alguma mensagem caso exista alguma pendência. O comando git status também te ajudará nisso.

Caso algum arquivo tenha sido apagado do projeto (propositalmente), use o comando abaixo para efetuar o registro desta remoção:

git rm arquivo

Todas atualizações efetuadas precisarão ser adicionadas/removidas ao projeto antes de salvá-las no ramo (add/rm). Para salvar o projeto é necessário registrar um comentário sobre a atualização. Atualizações importantes carecem de comentários ricos (bons comentários não geram arrependimentos). Para salvar a atualização do projeto no ramo, use o comando abaixo:

git commit -m Comentário sobre a atualização

Caso queira desfazer as atualizações, antes de efetuar o commit, é possível fazê-la com os comandos abaixo:

#Individualmente
git reset arquivo

#Generalizada
git reset

Consulte a documentação antes de executar comandos que desfazem ações para evitar perder algo importante. Observe se o resultado da ação corresponderá às expectativas.

Utilize o comando abaixo para consultar o histórico de atualizações. Nele é exibido o identificador do commit, informações sobre o autor e a data de atualização e o respectivo comentário realizado (capriche nos comentários):

git log

Também é possível comparar o projeto entre os diferentes ramos com o comando abaixo:

git diff ramo1 ramo2

Atualizando o GitHub

Até agora o projeto está salvo apenas dentro da estação de trabalho. Para atualizar a informação no GitHub é preciso empurá-la para a aplicação através do seguinte comando:

git push origin nomeRamo

Para cada atualização migrada para o GitHub, o git solicitará o nome do usuário e a respectiva senha da conta ou token registrado. Uma maneira de evitar tantas solicitações desta natureza é definir um prazo de validade da sessão (veja mais em GitHub Docs):

#Definindo sessão com validade de 1 hora
git config --global credential.helper cache --timeout=3600

Caso seja efetuada alguma atualização em outra estação de trabalho ou diretamente no GitHub, é possível trazê-la para a sua estação de trabalho atual com o seguinte comando:

git pull

Concluindo o Trabalho

Após concluído o trabalho no ramo secundário (correção/inovação concluída), é preciso levar o resultado dessa atualização para o ramo principal (master/main) ao fundir os ramos.

Para executar essa migração para o ramo principal, primeiro é preciso acessá-lo e então executar o comando que efetuará a pretendida migração, conforme comandos abaixo:

#Acessando o ramo principal (master ou main)
git checkout master

#Atualizando o ramo principal
git merge nomeRamo

A ideia acima também pode ser usada nas situações em que é preciso migrar atualizações entre ramos, não somente para o principal.

Dependendo da complexidade da atualização, algumas verificações ou alterações manuais nos arquivos serão necessárias para o sucesso da consolidação dos ramos. O sistema tentará efetuar a compilação entre os ramos de forma automática, mas podem acontecer situações em que alterações ou remoções manuais no ramo de destino sejam necessárias, devendo o usuário efetuá-las antes de executar novamente o comando. Observe as orientações dadas pelo git. Algum comentário sobre o atualização entre os ramos pode ser solicitado (um arquivo de texto será aberto no terminal, observe a legenda do editor).

Não esqueça de enviar as informações para o GitHub com o comando git push visto anteriormente.

Uma outra atitude saudável é promover o versionamento do projeto toda vez que o ramo principal receber novas informações relevantes sobre ele (nem tudo que for alterado no git vai precisar de versão, só o que mudar o projeto em si). Para efetuar o versionamento, será preciso efetuar um comentário e registrar o identificador da versão. Os comandos abaixo registram e enviam o versionamento para o GitHub:

#Registrando o versionamento
git tag -a versão -m Comentário da versão

#Enviando o versionamento para o GitHub
git push origin --tags

Outra maneira de fazer o versionamento é por meio do identificador de algum commit realizado. Neste caso, é preciso localizar (git log) e copiar o identificador do commit para informá-lo no comando (o comentário do commit será vinculado ao da versão). O comando teria o seguinte formato:

git tag versão ID

Com a atualização pronta, o ramo secundário poderá ficar sem utilidade. Portanto, caso deseje apagá-lo do projeto (se realmente não tiver mais utilidade), deverá ser realizado os seguintes comandos (em um ramo diferente):

#Apagando o ramo no git
git branch -d nomeRamo

#Enviando a atualização para o GitHub
git push origin :nomeRamo

Disposições Finais

O perigoso comando abaixo permite cancelar todos as alterações e commits locais e recuperar a informação do GitHub:

git reset --hard origin/master

O GitHub também possui uma ferramenta muito interessante que possibilita a criação de uma página web (estática) para o seu projeto, tal página é disponibilizada através da criação do ramo especial gh-pages.

Dentro desse ramo, deve-se criar uma página, no formato HTML ou markdown, com o nome index (e.g. index.html ou index.md) e enviar a informação do ramo para o GitHub. Para acessar a paǵina na web basta acessar o endereço https://usuario.github.io/diretorio/. Dentro das opções de configuração do GitHub, é possível obter modelos de formatação da página quando se escolhe utilizar o formato markdown.

Outra ferramenta interessante do GitHub é o wiki. É um repositório especial denominado diretorio.wiki que possibilita a criação de uma página em markdown para descrever o funcionamento ou apresentar o manual do projeto. É preciso habilitá-lo dentro das configurações do GitHub, depois é possível cloná-lo na estação de trabalho e realizar as atualizações localmente.

Diversas páginas podem ser criadas no diretório do wiki, há inclusive uma página para criação de um menu lateral (_Sidebar.md) e outra para criar um rodapé (_Footer.md). Observe as orientações fornecidas pelo GitHub. A página inicial deve ser denominada Home.md e pode ser acessada pelo endereço https://github.com/usuario/diretorio/wiki.

Outro repositório especial do GitHub é aquele denominado com o nome do usuário. Uma mensagem personalizada é exibida ao acessar o perfil no GitHub, é uma forma do proprietário do perfil alertar sobre alguma novidade em seus repositórios. Neste caso, o arquivo README.md é o responsável por conter a mensagem.

O GitHub possui outros atrativos, procure conhecê-los e ver se podem agregar algo ao seu projeto.