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 apt, yum 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 |
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:
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.