Qualidade de Software | Mestrado em Engenharia de Software @ IPSetúbal
João Damásio joao.damasio@estudantes.ips.pt
Rodrigo Rente rodrigo.rente@estudantes.ips.pt
- Introdução
- Objetivos
- Instalação
- Configuração
- Novo Projeto
- Registo de Alterações
- Ramos e Histórico de Alterações
- Colaboração e Repositórios Remotos
O Git é um sistema de controlo de versões distribuído, usado principalmente no desenvolvimento de software, mas pode ser usado para registar o histórico de edições de qualquer tipo de ficheiro (Exemplo: alguns livros digitais são disponibilizados no GitHub e escrito aos poucos publicamente).
O Git foi inicialmente projetado e desenvolvido por Linus Torvalds para o desenvolvimento do kernel Linux, mas foi adotado por muitos outros projetos.
Cada diretório do Git é um repositório com um histórico completo e capacidade total de acompanhamento das revisões, não dependente do acesso a uma rede ou a um servidor central.
O Git também facilita a reprodutibilidade científica em uma ampla gama de disciplinas, da ecologia à bioinformática, arqueologia à zoologia.
O Git é um software livre, distribuído sob os termos da versão 2 da GNU General Public License. A sua manutenção é atualmente supervisionada por Junio Hamano.
Website do Git.
Após concluir este tutorial, o utilizador terá os seguintes conhecimentos:
- Conhecimento básico sobre a movimentação entre pastas, criar diretórios e ficheiros utilizando a consola Git Bash, que é muito semelhante à terminal dos sistemas Linux;
- Instalação do git e configuração inicial da conta de utilizador;
- Criação de um novo repositório e registo de alterações através dos commits;
- Utilização de vários ramos e como utilizar o merge para implementar novas funcionalidades no ramo base do projeto;
- Como utilizar um repositório remoto e colaborar com outros utilizadores em plataformas tais como o GitHub.
- Download do GIT: https://git-scm.com/downloads
- Após o download concluir, executar o ficheiro de instalação.
- Escolher o local de instalação e avançar com todas as restantes opções do predefinido, que permitirá concluir este tutorial sem qualquer problema.
- Abrir a Git Bash com o atalho:
WIN+S
pesquisando por “Git Bash”.
- Através do comando
git config
, é possível configurar o essencial de forma a permitir a realização de commits:
$ git config --global user.name "O Teu Nome"
$ git config --global user.email oteuemail@estudantes.ips.pt
- Caso pretenda verificar se ficou tudo bem configurado, é possível fazê-lo utilizando os mesmos comandos, mas sem a parte final. Por exemplo,
git config --global user.name
imprime “O Teu Nome”.
- Criar uma pasta comum para todos os projetos Git. Neste tutorial, escolhemos o nome padrão
src
no entanto fica ao critério do utilizador.
# MKDIR <name>: cria uma pasta com o nome atribuído
$ mkdir src
# CD <path>: muda o diretório atual do Bash
$ cd src
- À semelhança do anterior, criar uma pasta para o tutorial com o nome
tutorial
. Após este passo e mudando para a nova pasta, o diretório do Bash deve ser o seguinte:~/src/tutorial/
. - Agora que estamos na pasta correta, vamos criar um novo repositório Git.
# GIT INIT [path]: cria um novo repositório no diretório atual ou no caminho indicado
$ git init
- Em caso de sucesso, o Bash deverá ter dado a seguinte resposta:
Initialized empty Git repository in .git/
Agora já temos um novo repositório Git no diretório atual. Isto cria uma pasta escondida .git
onde são guardadas as informações do repositório.
- Adicionar um ficheiro de texto com um conteúdo básico:
# De forma simples, o ECHO envia o texto "Hello World!" para o ficheiro "hello.txt"
$ echo "Hello World!" > hello.txt
# Quando usado apenas com um ficheiro, o CAT lê os seus conteúdos para o Bash
$ cat hello.txt
Hello World!
- O comando
git status
mostra o estado atual do repositório. Neste momento, deve mostrar que existe 1 untracked file, o ficheirohello.txt
. - Adicionar o ficheiro que acabámos de criar ao próximo commit, através do comando
git add
:
$ git add hello.txt
- Fazer o commit inicial do repositório através do comando
git commit
:
git commit -m "Initial commit"
Este comando faz o registo das alterações existentes, com a mensagem que vem a seguir ao -m
. É importante incluir as aspas para a mensagem possa ter mais do uma palavra! Uma boa prática é utilizar uma descrição simples e objetiva, existe um conjunto de boas-práticas para as mensagens do commit no final do tutorial.
- Para verificar que já não existem alterações pendentes, utilizamos o comando
git status
, que indica o estado atual da working tree. Agora, deverá dizer que não existe nada para registar.
Os ramos do git são um boa forma de manter o trabalho de várias features diferentes isolado, para que possa ser desenvolvido sem conflitos até chegar à altura de a acrescentar ao ramo master.
Quando queremos experimentar algo novo é uma boa prática criar um ramo novo antes de o fazer. Assim, caso não resulta da forma que esperámos, podemos sempre voltar ao estado anterior dos ficheiros.
- Nomes genéricos dos ramos padrão do git:
- Development [
dev
,gen-devel
,general-devel
] - Master [
master
] - Testing [
tests
,testing
,qa
]
- Development [
- Mudar para um novo ramo
dev
:
git checkout -b dev
O argumento -b
cria o ramo caso não exista. Voltarmos ao ramo principal, basta fazer git checkout master
. No entanto, não o iremos fazer agora pois temos alterações a fazer no ramo dev
.
Eis as bases de alguns comandos importantes nesta fase:
- O
git commit
regista as alterações no ramo em que nos encontramos quando o usamos. - O
git log
mostra o histórico de todos os commits com a mensagem resumida das alterações. Outra forma de ver o histórico de forma mais visual é com o comandogitk
. - O
git branch [name]
é outra forma de criar ramos, neste caso sem alterar automaticamente o ramo atual.git branch -d [name]
apaga um ramo.
- No ramo
dev
que criámos há pouco, vamos fazer algumas alterações:
$ echo "This is my first Git Repository" > readme.txt
# Ao utilizarmos o operador >>, vamos acrescentar o seguinte ao fim do ficheiro
$ echo "Goodbye World!" >> hello.txt
# Agora o ficheiro deve ter duas linhas
$ cat hello.txt
Hello World!
Goodbye World!
- Fazer
git commit
destas alterações, que ficarão registadas no ramodev
. - Agora voltamos ao ramo master:
git checkout master
. - Entretanto decidimos que as alterações de desenvolvimento já estão prontas para serem implementadas, pelo que vamos fazer um merge:
git merge dev
- O comando
git merge <ramo>
faz merge entre dois ramos — este comando tenta fazer merge automático entre todas as alterações de um<ramo>
e introduzi-las por cima do ramo ATUAL. - Todos os commits que foram feitos no ramo
dev
antes do merge também passarão a existir no ramomaster
. - Se fizermos
git log
ougitk
é possível ver através de uma representação visual, onde foi feito o merge a partir de outro ramo.
Esta seção aplica os vários conhecimentos obtidos, está construída de forma mais abstrata de modo a aplicar estes conhecimentos.
Esta seção pode ser feita a pares, para a parte da colaboração. Caso contrário, também é possível simular através da utilização de pastas diferentes (no entanto, os commits ficarão registados como sendo todos da mesma pessoa).
Para fazer com outra pessoa, é necessário ir às definições do GitHub e adicionar a conta dessa pessoa como Colaborador, para que tenha permissões para fazer git push
. No entanto, qualquer pessoa pode fazer git clone
de qualquer repositório, desde que seja público.
- Criar de uma conta no GitHub: https://github.com
- Criar um repositório simples no GitHub com o nome
tutorial
. Para facilitar a colaboração, o ideal será deixar o repositório público. - Adicionar as permissões necessárias nas definições do repositório caso pretenda que outro utilizador faça commits para este repositório.
- Para adicionar o nosso repositório do GitHub como origem do nosso repositório local:
# Copiar o URL do nosso novo repositório no GitHub para utilizar aqui:
$ git remote add origin LINK_PARA_O_NOSSO_REPOSITORIO_NO_GITHUB
- Fazer
push
para esse repositório do nosso conteúdo
# Enviar para o nosso repositório "origin", todas as alterações ao ramo "master"
$ git push origin master
- Fazer
clone
do repositório do colega, ou numa pasta diferente:
# Descarrega o código de um repositório remoto
# Como não introduzimos nenhum parametro, o clone irá para uma pasta
# com o nome do repositório
$ git clone LINK_DO_REPOSITÓRIO_REMOTO
- Fazer uma alteração simples ao ficheiro e consequentemente
commit
epush
para submeter as alterações no repositório remoto. - No computador original, para descarregar as alterações basta utilizar o
git pull
.
Através deste ciclo, já é possível desenvolver software em colaboração com outros.
Git - gittutorial Documentation
Official Git Tutorial
Git Branch Naming Convention: 7 Best Practices to Follow | HackerNoon
Padrões para os nomes dos ramos do git.
Boas práticas para as mensagems dos commits.