2. Agenda
Introdução a RCS (aka sistemas de controlo de versões)
Conceitos básicos de Git
Comandos básicos de Git
Hands on: Git your project!
3. Introdução
RCS - Revision Control System
= Sistema de Controlo de Versões
Porquê?
➔ reverter código para versões anteriores (quando o programa
ainda funcionava)
➔ ctrl+z não chega
➔ trabalho em equipa
➔ nada de zip/rar por email ou dropbox...
4. Introdução
RCS - Source Control Managment
SCM - Para além do Git
CVS
Mercurial
Subversion (svn)
BitKeeper
Git
5. Introdução
Git
SCM - Source Control Managment
Desenvolvido em 2005 por
Linus Torvalds (Criador do GNU/Linux)
Optimizado para
Desenvolvimento Distribuído
Projetos de grandes dimensões
Juntar código (merge) complexo
Fazer experiências (branchs)
23. Git
Conceitos Básicos
Boas práticas
Como usar branchs e tags?
➔ Branches: feature, bugfix, ...
➔ Tags: releases
Cada projeto é único e tem exigências diferentes.
Cada caso é um caso com regras diferentes.
Mas tem de haver regras a cumprir!
25. Git
Comandos Básicos
init, add, status, commit
Enough talking… where’s the code?!
$ git init
# cria a pasta .git
$ git add <file>
# adicionar ficheiros para o commit
$ git commit
# commit
$ git status
# estado da working tree e do index
27. Git
Comandos Básicos
Staging area / index
commit
e7c0d3d
filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
├── lib1.js
│
└── lib2.js*
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
├── mult.js
├── div.js*
└── sub.js
$ git status
# Untracked files:
#
#
lib/lib2.js
tests/div.js
HEAD
master
git add -A
Staging Area /
Index
git commit
$ git status
# Changes to be committed:
#
#
new file:
new file:
lib/lib2.js
tests/div.js
filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
├── lib1.js
│
└── lib2.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
├── mult.js
├── div.js
└── sub.js
$ git status
nothing to commit, working
directory clean
28. Git
Comandos Básicos
Staging area / index
commit
e7c0d3d
filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
├── lib1.js
│
└── lib2.js*
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
├── mult.js
├── div.js*
└── sub.js
$ git status
# Untracked files:
#
#
lib/lib2.js
tests/div.js
git add -A
Staging Area /
Index
git commit
$ git status
# Changes to be committed:
#
#
new file:
new file:
lib/lib2.js
tests/div.js
filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
├── lib1.js
│
└── lib2.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
├── mult.js
├── div.js
└── sub.js
HEAD
master
$ git status
nothing to commit, working
directory clean
29. Git
Comandos Básicos
$ git reset <file>
reset, diff, log, reflog
# oposto de “git add”
$ git diff
# ver alterações que ainda não estão no index
$ git log
# ver log de commits até ao momento
$ git reflog
# ver log de todos os comandos feitos
30. Git
Comandos Básicos
branch, checkout, merge
$ git branch <branch_name>
# cria um branch
# “git branch” para ver lista de branchs existentes
$ git checkout <branch>
# muda working tree para o branch especificado
$ git merge <branch>
# merge do branch actual com o branch especificado
32. Git
Comandos Básicos
$ git clone <repo_url>
clone, push, pull
# copia repo para uma pasta
$ git push [remote] [branch]
# envia commits locais para remote repo
$ git pull [repo]
# vai buscar commits do remote repo e faz merge
Hosting de repos: Github, BitBucket, Assembla, Google Code,
SourceForge
33. Git
Comandos Básicos
$ git help
help!
# help! lista de comandos mais usados
$ git help <command>
# ex: git help commit
# todas as opções de um comando
36. Git
Hands on!
Exercício: Fazer um projeto com Git
Guidelines
➔ Manter commits pequenos
➔ Mensagens de commits claras
➔ Usar Branches em features ou bugfixs
➔ Tags em commits chave
37. Git
Hands on!
Exercício: Calculadora muito simples
Requisitos
➔ Operações básicas: add, sub, mult, div
➔ Código bem documentado
Opcional:
➔ Outras operações: sqrt, power, fact
➔ testes unitários