fbpx Certificação Linux: Controle de versão no Linux com o Git [Guia Básico]

Blog

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

📅 02/12/2021 ⏱ 8 min ✍️ Uira Ribeiro
Linux
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 initInitialized empty Git repository in /home/uira/projeto/.git/

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

$ ls -1 .git/branchesconfigdescriptionHEADhooksinfoobjectsrefs

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 "uribeiro@gmail.com"

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 = uribeiro@gmail.com

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

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

$ git clone https://github.com/uiraribeiro/aulalpi.git aulasCloning into 'aulas'...remote: Enumerating objects: 23, done.remote: Total 23 (delta 0), reused 0 (delta 0), pack-reused 23Unpacking 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 logcommit a5a18f7cff53e0c3b4ea6ecfd4d53f704652ba79 (HEAD -> master)Author: Uira Ribeiro <uribeiro@gmail.com>Date:   Sun Jan 12 16:58:14 2020 -0300    alteracoescommit 2323684b1a8e861250a4250dec8c400e0ce7ca6d (origin/master, origin/HEAD)Author: Prof. Uirá Ribeiro <atendimento@certificacaolinux.com.br>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 pushUsername for 'https://github.com': uiraPassword for 'https://uiraribeiro@github.com': Enumerating objects: 5, done.Counting objects: 100% (5/5), done.Delta compression using up to 2 threadsCompressing 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 pullAlready 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:

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 livroSwitched 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 masterSwitched 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 livroUpdating a5a18f7..5b7568dFast-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

Uira Ribeiro

Prof. Uirá Ribeiro

Chair do Board do Linux Professional Institute

Especialista Linux com mais de 20 anos de experiência.
Autor de 5 livros e mentor de mais de 14.000 alunos certificados.
20 certificações de alto nível, incluindo LPIC-3, CKA, RHCE e AWS Solutions Architect.

WhatsApp