Controle de versão no Linux com o Git [Guia Básico]

O controle de versão no Linux com o git do código fonte durante o desenvolvimento de um software é importante, até mesmo para quem desenvolve software sem colaboração de mais pessoas.

No mundo open-source, cuja premissa é distribuir o código-fonte livremente, para que possa ser melhorado através da contribuição de diversos desenvolvedores pelo mundo, o controle de versão é absolutamente necessário.

Existem diversos softwares de controle de versão gratuitos e de código aberto disponíveis, como o CVS, SVN e o GIT. 

Este último, criado por Linus Torvalds, tornou-se popular, uma vez que utiliza repositórios de software gratuitos para fazer a distribuição e controle do código-fonte. 

Vários repositórios surgiram, como o GitHub (adquirido pela Microsoft), GitLab, BitBucket, dentre outros.

O pacote git pode ser instalado no Linux utilizando o gerenciador de pacotes aptyum ou dnf.

Termos importantes para entender o Git:

  • Repositório remoto: é o repositório hospedado em algum servidor, que fará o controle de usuários e controle de versão; 
  • Workspace: é o diretório local, que permite o desenvolvedor trabalhar na sua cópia local do código-fonte. Normalmente é um diretório comum na máquina;
  • Index: é um diretório escondido que fica no diretório de trabalho (workspace), com nome “.git“. O git mantém um índice dos arquivos do workspace, com checksum, timestamps, etc. Além do índice, o git mantém uma cópia comprimida de todas as versões de todos os os arquivos em forma de objeto.
  • Repositório Local: mantido dentro do diretório .git. Contém o histórico de cada arquivo do projeto, na forma de um snapshot (uma imagem), a cada ação de “commit“.

Criar um Novo Projeto com o Git

Para criar um novo projeto e versiona-lo com o Git, é necessário seguir os seguintes passos:

Primeiro cria-se um diretório usando o comando mkdir:

$ mkdir projeto
$ cd projeto

Depois pode-se inicializar o diretório para usar o Git, com o comando init:

$ git init
Initialized empty Git repository in /home/uira/projeto/.git/

A inicialização cria o diretório oculto .git:

$ ls -1 .git/
branches
config
description
HEAD
hooks
info
objects
refs

Configurar um projeto com o git

Depois, deve-se trocar o usuário e email usado no Git, para possibilitar o rastreio das alterações, com o comando config:

$ git config --global user.name "Uira Ribeiro" 
$ git config --global user.email "[email protected]"

Se usado a opção “–global“, o git irá guardar a identificação em um arquivo chamado .gitconfig no diretório home do usuário:

$ cat ~/.gitconfig 
[user]
name = Uira Ribeiro
email = [email protected]

Agora pode-se usar o diretório do Workspace criado para escrever os programas.

Para adicionar um novo projeto a um repositório remoto, deve-se primeiro criar o repositório remoto, através do site do GitHub.

Depois, pode-se usar o comando remote:

$ git remote add origin https://github.com/uira/projetoteste

Clonar um Projeto do Github

Se não for iniciar um novo projeto, pode-se clonar um projeto existente no GitHub.

Para se clonar um projeto de repositório no GitHub (ou outro repositório), é necessário copiar a URL do projeto.

github_CompT Controle de versão no Linux com o Git [Guia Básico] Github

O comando clone pode ser usado para se clonar um projeto de um repositório remoto:

$ git clone https://github.com/uiraribeiro/aulalpi.git aulas
Cloning into 'aulas'...
remote: Enumerating objects: 23, done.
remote: Total 23 (delta 0), reused 0 (delta 0), pack-reused 23
Unpacking objects: 100% (23/23), done.

Desta forma, todos os arquivos da última versão serão copiados para o diretório de trabalho recém criado chamado “aulas“.

Adicionar arquivos ao Índex do git

Toda a vez que se adicionar um arquivo ao projeto, ou alterar algum arquivo, é necessário envia-lo ao índex.

Para adicionar arquivos ao índex, deve-se usar o comando “add“. Ele precisa de um parâmetro, que pode ser o nome do arquivo, ou um ponto “.” ou asterisco “*” para se designar toda a árvore de diretórios do Workspace.

$ git add *

O comando “add” não produz nenhuma saída. 

Se não se deseja que o comando “add” adicione um determinado diretório ao índice, deve-se criar um arquivo chamado .gitignore na raiz deste diretório.

Adicionar Arquivos ao Repositório Local do git

Depois de adicionar os arquivos ao índex, pode-se criar um snapshot (uma imagem) dos arquivos adicionados ou alterados no repositório Git local com o comando “commit”:

$ git commit -m "alteracoes" 
[master a5a18f7] alteracoes
 1 file changed, 2 insertions(+)

A opção “-m” do commit escreve um comentário no repositório, com observações sobre as alterações feitas. Se não for utilizada a opção “-m”, o git irá abrir o editor de textos padrão, com a lista de arquivos alterados e adicionados, para que o usuário descreva as alterações feitas.

Visualizando o Log de Alterações do git

O comando log pode ser usado para se visualizar as alterações no repositório.

$ git log
commit a5a18f7cff53e0c3b4ea6ecfd4d53f704652ba79 (HEAD -> master)
Author: Uira Ribeiro <[email protected]>
Date:   Sun Jan 12 16:58:14 2020 -0300
    alteracoes
commit 2323684b1a8e861250a4250dec8c400e0ce7ca6d (origin/master, origin/HEAD)
Author: Prof. Uirá Ribeiro <[email protected]>
Date:   Fri Apr 27 18:25:30 2018 -0300
    first commit

Enviando do Repositório Local para o Repositório Remoto do git

Uma vez que os arquivos do projeto estão prontos, pode-se compartilhar as alterações do último commit com o repositório remoto, através do comando push.

O comando push requer que se tenha um usuário e senha no repositório remoto:

$ git push
Username for 'https://github.com': uira
Password for 'https://[email protected]': 
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 2 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 290 bytes | 290.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/uiraribeiro/aulalpi.git
   2323684..a5a18f7  master -> master

Desta forma, ele enumera os arquivos que foram alterados, adicionados e apagados, comprime, e envia para o repositório remoto.

Atualizando o Repositório Local do git

Para atualizar o repositório e o Workspace local com as últimas alterações do repositório remoto, pode-se usar o comando pull:

$ git pull
Already up to date.

Se não houverem alterações, o git não fará nada.

A figura 57 ilustra o processo de versionamento básico do Git:

git_CompT Controle de versão no Linux com o Git [Guia Básico]Figura 57 – Git

Criando um Branch com o git

Um branch é uma ramificação no controle de versão e no gerenciamento do desenvolvimento do software.

Basicamente ele permite a duplicação de um objeto sob controle de versão (um arquivo de código-fonte ou um conjunto de diretórios), para que modificações possam ocorrer em paralelo ao longo de várias ramificações.

Basicamente é uma metodologia que permite que vários desenvolvedores colaborem no mesmo projeto, com a capacidade de separar o que cada um fez (cada qual com seu branch), e depois juntar em algo que funcione, mesclando os diferentes branches.

Desta forma, o objetivo de se criar um branch é organizar a capacidade de mesclar os diferentes branches através de um merge ao projeto pai.

O branch também permite que novos softwares surjam de projetos existentes. Quando isso acontece é chamado de fork. Por exemplo, o MariaDB é um fork do MySQL.

O git automaticamente cria um branch principal, ou pai, chamado de “master“.

Para se criar uma ramificação de arquivos do projeto, pode-se usar o comando “branch” para criar uma ramificação:

$ git branch livro

Neste exemplo, criou-se um branch do projeto aula, chamado “livro“. O git não usa o novo branch até que se faça um checkout:

$ git checkout livro
Switched to branch 'livro'

A partir deste momento, todos os arquivos adicionados com o comando “add” e enviados ao repositório local com commit, serão gravados no branch livro.

Mesclando um Branch com o git

Uma vez que se deseja mesclar os arquivos de um branch ao projeto original (branch master), pode-se usar o comando merge.

Para fazer isso, primeiro deve-se fazer o checkout no branch master:

$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

Pode-se confirmar qual é o branch de trabalho com o comando branch:

$ git branch
  livro
* master

O asterisco (*) diz qual é o branch em que se está trabalhando.

Para mesclar o branch livro com o branch master, usa-se o comando merge:

$ git merge livro
Updating a5a18f7..5b7568d
Fast-forward
 arquivo | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 arquivo

Conclusão

O git é um poderoso gerenciador de pacotes, utilizado até no versionamento do kernel do Linux. Com certeza o mais utilizado para controle de versão no mundo da programação. Se você escreve algum software, com certeza você precisa usar o Git.

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe