SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
Workshop de

Git
por José Bateira
jose.l.bateira@ieee.org

NuIEEE
nuieee@fe.up.pt
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!
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...
Introdução

RCS - Source Control Managment
SCM - Para além do Git
CVS

Mercurial

Subversion (svn)

BitKeeper

Git
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)
Git

Conceitos Básicos
filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
├── v1.0.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
├── div.js
├── fact.js
├── mult.js
└── sub.js

working tree

Working tree/directory
Git

Conceitos Básicos
filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
├── v1.0.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
├── div.js
├── fact.js
├── mult.js
└── sub.js

working tree

Gestão de alterações da working tree

Adicionar
Editar

Eliminar
Git

Conceitos Básicos

filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
└── sub.js

commit
e7c0d3d

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── mult.js
└── sub.js

commit

commit
a1f84f5

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

commit
eec9901

Representação em Grafo

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
├── v1.0.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js
Git

Conceitos Básicos
commit
f7c5b39
filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
└── sub.js

commit
e7c0d3d
filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── mult.js
└── sub.js

Representação em Grafo

commit

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

commit
a1f84f5

commit
eec9901
filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
├── v1.0.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js
Git

Conceitos Básicos
commit
f7c5b39
filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
└── sub.js

commit
e7c0d3d
filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── mult.js
└── sub.js

HEAD -> Onde estou

HEAD

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

commit
a1f84f5
HEAD
commit
eec9901
filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
├── v1.0.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js
Git

Conceitos Básicos
commit
f7c5b39
filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
└── sub.js

HEAD

commit
e7c0d3d
filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── mult.js
└── sub.js

HEAD -> Onde estou

HEAD

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

commit
a1f84f5

commit
eec9901
filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
├── v1.0.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js
Git

Conceitos Básicos
commit
f7c5b39
filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
└── sub.js

commit
e7c0d3d
filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── mult.js
└── sub.js

HEAD -> Onde estou

HEAD

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

HEAD

commit
a1f84f5

commit
eec9901
filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
├── v1.0.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js
Git

Conceitos Básicos
commit
e7c0d3d
filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── mult.js
└── sub.js

Branch -> marker

Branches

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

HEAD
master

bugfix
filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
├── v1.0.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js
Git

Conceitos Básicos

filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
└── sub.js

HEAD
master

Branches
Git

Conceitos Básicos

filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── mult.js
└── sub.js

Branches

HEAD
master
Git

Conceitos Básicos

filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── mult.js
└── sub.js

Branches

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

HEAD
master
Git

Conceitos Básicos

filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── mult.js
└── sub.js

Branches

HEAD
bugfix

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

master
Git

Conceitos Básicos

filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── mult.js
└── sub.js

Branches

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

master

HEAD
bugfix

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
├── v1.0.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js
Git

Conceitos Básicos

filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── mult.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

HEAD
bugfix

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
├── v1.0.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

Merge

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

master
Git

Conceitos Básicos

filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── mult.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
├── v1.0.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

Merge

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js
filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
├── v1.0.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

HEAD
master
bugfix
Git

Conceitos Básicos

filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── mult.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
├── v1.0.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

Merge

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js
filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
├── v1.0.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

HEAD
master
Git

Conceitos Básicos

Tags
v0.2

v0.1
filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── mult.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
├── v1.0.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

v0.2.1
filetree/
├── doc
│
├── v0.1.0.txt
│
├── v0.2.0.txt
│
├── v0.6.0.txt
│
├── v1.0.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js*
│
└── main.js
└── tests
├── add.js*
├── div.js
├── fact.js
├── mult.js
└── sub.js

HEAD
master
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!
Git

Conceitos Básicos

Boas práticas

A successfull Git branching
model
by Vincent Driessen

http://nvie.com/posts/a-successful-git-branching-model
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
Git

Comandos Básicos
HEAD
filetree/
├── doc
│
├── v0.1.0.txt
│
└── v1.4.0.txt
├── lib
│
└── lib1.js
├── README.md
├── src
│
├── calc.js
│
└── main.js
└── tests
├── add.js
├── mult.js
└── sub.js

master

commit
e7c0d3d

Staging area / index

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

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
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
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
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
Git

Comandos Básicos

gui, gtk

Eye candy...
$ git gui

$ gitk

# commit log

# operações de stage e snaphot

Windows: SourceTree, TortoiseGit, git-cola, GitEye
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
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
Git

Ref

tutoriais, cheat sheets

Tutoriais
➔
➔
➔
➔

stackoverflow - definite pratical guide
http://gitimmersion.com
http://git-scm.com/docs/gittutorial
http://www.sbf5.com/~cduan/technical/git

Cheat sheets
➔
➔
➔
➔
➔

http://git-scm.com/docs
cheat sheet dada
http://ktown.kde.org/~zrusin/git/git-cheat-sheet-medium.png

http://ndpsoftware.com/git-cheatsheet.html
http://git-scm.com/docs/everyday.html
Git

Hands on!
➔ github.com/nuieee
➔ repo -> workshop-git
➔ copiar clone URL

$ git clone git@github.com:nuieee/workshop-git.git
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
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

Contenu connexe

En vedette

I enjoy going to the pink palace museum
I enjoy going to the pink palace museumI enjoy going to the pink palace museum
I enjoy going to the pink palace museumaldaysha
 
Service operator aware trust scheme for resource matchmaking across multiple ...
Service operator aware trust scheme for resource matchmaking across multiple ...Service operator aware trust scheme for resource matchmaking across multiple ...
Service operator aware trust scheme for resource matchmaking across multiple ...ieeepondy
 
Truthful greedy mechanisms for dynamic virtual machine provisioning and alloc...
Truthful greedy mechanisms for dynamic virtual machine provisioning and alloc...Truthful greedy mechanisms for dynamic virtual machine provisioning and alloc...
Truthful greedy mechanisms for dynamic virtual machine provisioning and alloc...ieeepondy
 
Scalable transaction management with snapshot isolation for no sql data stora...
Scalable transaction management with snapshot isolation for no sql data stora...Scalable transaction management with snapshot isolation for no sql data stora...
Scalable transaction management with snapshot isolation for no sql data stora...ieeepondy
 
Planeje suas finanças para 2014 e realize seus sonhos sem ficar no vermelho
Planeje suas finanças para 2014 e realize seus sonhos sem ficar no vermelhoPlaneje suas finanças para 2014 e realize seus sonhos sem ficar no vermelho
Planeje suas finanças para 2014 e realize seus sonhos sem ficar no vermelhoAnissis Ramos
 
Stochastic modeling and quality evaluation of infrastructure as-a-service clouds
Stochastic modeling and quality evaluation of infrastructure as-a-service cloudsStochastic modeling and quality evaluation of infrastructure as-a-service clouds
Stochastic modeling and quality evaluation of infrastructure as-a-service cloudsieeepondy
 
2014HIRINGDECK w/sound
2014HIRINGDECK w/sound2014HIRINGDECK w/sound
2014HIRINGDECK w/soundJakob Karasik
 
Louro: Produção de mudas e plantio
Louro: Produção de mudas e plantio Louro: Produção de mudas e plantio
Louro: Produção de mudas e plantio Rural Pecuária
 
Artisan Brothers biz cd fb
Artisan Brothers biz cd fbArtisan Brothers biz cd fb
Artisan Brothers biz cd fbUIA Graphics
 
Export assistant performance appraisal
Export assistant performance appraisalExport assistant performance appraisal
Export assistant performance appraisalGaryNeville345
 

En vedette (13)

I enjoy going to the pink palace museum
I enjoy going to the pink palace museumI enjoy going to the pink palace museum
I enjoy going to the pink palace museum
 
Service operator aware trust scheme for resource matchmaking across multiple ...
Service operator aware trust scheme for resource matchmaking across multiple ...Service operator aware trust scheme for resource matchmaking across multiple ...
Service operator aware trust scheme for resource matchmaking across multiple ...
 
Truthful greedy mechanisms for dynamic virtual machine provisioning and alloc...
Truthful greedy mechanisms for dynamic virtual machine provisioning and alloc...Truthful greedy mechanisms for dynamic virtual machine provisioning and alloc...
Truthful greedy mechanisms for dynamic virtual machine provisioning and alloc...
 
Scalable transaction management with snapshot isolation for no sql data stora...
Scalable transaction management with snapshot isolation for no sql data stora...Scalable transaction management with snapshot isolation for no sql data stora...
Scalable transaction management with snapshot isolation for no sql data stora...
 
Planeacion español d
Planeacion español dPlaneacion español d
Planeacion español d
 
Accomplishment
AccomplishmentAccomplishment
Accomplishment
 
Planeje suas finanças para 2014 e realize seus sonhos sem ficar no vermelho
Planeje suas finanças para 2014 e realize seus sonhos sem ficar no vermelhoPlaneje suas finanças para 2014 e realize seus sonhos sem ficar no vermelho
Planeje suas finanças para 2014 e realize seus sonhos sem ficar no vermelho
 
Stochastic modeling and quality evaluation of infrastructure as-a-service clouds
Stochastic modeling and quality evaluation of infrastructure as-a-service cloudsStochastic modeling and quality evaluation of infrastructure as-a-service clouds
Stochastic modeling and quality evaluation of infrastructure as-a-service clouds
 
Biologia
BiologiaBiologia
Biologia
 
2014HIRINGDECK w/sound
2014HIRINGDECK w/sound2014HIRINGDECK w/sound
2014HIRINGDECK w/sound
 
Louro: Produção de mudas e plantio
Louro: Produção de mudas e plantio Louro: Produção de mudas e plantio
Louro: Produção de mudas e plantio
 
Artisan Brothers biz cd fb
Artisan Brothers biz cd fbArtisan Brothers biz cd fb
Artisan Brothers biz cd fb
 
Export assistant performance appraisal
Export assistant performance appraisalExport assistant performance appraisal
Export assistant performance appraisal
 

Similaire à NuIEEE - Workshop de Git

Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.Gerardo Di Iorio
 
Building Large Java Codebase with Bazel - CodeOne
Building Large Java Codebase with Bazel - CodeOneBuilding Large Java Codebase with Bazel - CodeOne
Building Large Java Codebase with Bazel - CodeOneNatan Silnitsky
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacyTommaso Torti
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaAlessandro Selli
 
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...Aruba S.p.A.
 
Introduzione a git
Introduzione a gitIntroduzione a git
Introduzione a gitrpanfili
 
node.js e Postgresql
node.js e Postgresqlnode.js e Postgresql
node.js e PostgresqlLucio Grenzi
 
Linux Day 2015 Genova
Linux Day 2015 GenovaLinux Day 2015 Genova
Linux Day 2015 Genovamperrando
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2Giorgio Cefaro
 
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...Matteo Baccan
 
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...Codemotion
 

Similaire à NuIEEE - Workshop de Git (20)

Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
 
Building Large Java Codebase with Bazel - CodeOne
Building Large Java Codebase with Bazel - CodeOneBuilding Large Java Codebase with Bazel - CodeOne
Building Large Java Codebase with Bazel - CodeOne
 
Require js
Require jsRequire js
Require js
 
Standard Dev Workflow
Standard Dev WorkflowStandard Dev Workflow
Standard Dev Workflow
 
TuxIsAlive
TuxIsAliveTuxIsAlive
TuxIsAlive
 
GITT (part 1 of 2)
GITT (part 1 of 2)GITT (part 1 of 2)
GITT (part 1 of 2)
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacy
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compatta
 
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...Con Aruba, a lezione di Cloud  #lezione 30 - parte 2: 'GitLab e Cloud Server ...
Con Aruba, a lezione di Cloud #lezione 30 - parte 2: 'GitLab e Cloud Server ...
 
Introduzione a git
Introduzione a gitIntroduzione a git
Introduzione a git
 
node.js e Postgresql
node.js e Postgresqlnode.js e Postgresql
node.js e Postgresql
 
Linux Day 2015 Genova
Linux Day 2015 GenovaLinux Day 2015 Genova
Linux Day 2015 Genova
 
Git
GitGit
Git
 
Emerasoft Git quickstart
Emerasoft Git quickstartEmerasoft Git quickstart
Emerasoft Git quickstart
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2
 
Introduzione a Git
Introduzione a GitIntroduzione a Git
Introduzione a Git
 
Grasso Frameworks Ajax
Grasso Frameworks AjaxGrasso Frameworks Ajax
Grasso Frameworks Ajax
 
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
Codemotion 2013: Succo di lampone: come ottimizzare JAVA e PHP su un’architet...
 
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...
Succo di lampone: come ottimizzare JAVA e PHP su un’architettura Raspberry Pi...
 
Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 

NuIEEE - Workshop de Git

  • 1. Workshop de Git por José Bateira jose.l.bateira@ieee.org NuIEEE nuieee@fe.up.pt
  • 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)
  • 6. Git Conceitos Básicos filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ ├── v1.0.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js ├── div.js ├── fact.js ├── mult.js └── sub.js working tree Working tree/directory
  • 7. Git Conceitos Básicos filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ ├── v1.0.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js ├── div.js ├── fact.js ├── mult.js └── sub.js working tree Gestão de alterações da working tree Adicionar Editar Eliminar
  • 8. Git Conceitos Básicos filetree/ ├── doc │ ├── v0.1.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js └── sub.js commit e7c0d3d filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── mult.js └── sub.js commit commit a1f84f5 filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js commit eec9901 Representação em Grafo filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ ├── v1.0.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js
  • 9. Git Conceitos Básicos commit f7c5b39 filetree/ ├── doc │ ├── v0.1.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js └── sub.js commit e7c0d3d filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── mult.js └── sub.js Representação em Grafo commit filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js commit a1f84f5 commit eec9901 filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ ├── v1.0.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js
  • 10. Git Conceitos Básicos commit f7c5b39 filetree/ ├── doc │ ├── v0.1.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js └── sub.js commit e7c0d3d filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── mult.js └── sub.js HEAD -> Onde estou HEAD filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js commit a1f84f5 HEAD commit eec9901 filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ ├── v1.0.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js
  • 11. Git Conceitos Básicos commit f7c5b39 filetree/ ├── doc │ ├── v0.1.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js └── sub.js HEAD commit e7c0d3d filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── mult.js └── sub.js HEAD -> Onde estou HEAD filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js commit a1f84f5 commit eec9901 filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ ├── v1.0.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js
  • 12. Git Conceitos Básicos commit f7c5b39 filetree/ ├── doc │ ├── v0.1.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js └── sub.js commit e7c0d3d filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── mult.js └── sub.js HEAD -> Onde estou HEAD filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js HEAD commit a1f84f5 commit eec9901 filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ ├── v1.0.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js
  • 13. Git Conceitos Básicos commit e7c0d3d filetree/ ├── doc │ ├── v0.1.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── mult.js └── sub.js Branch -> marker Branches filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js HEAD master bugfix filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ ├── v1.0.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js
  • 14. Git Conceitos Básicos filetree/ ├── doc │ ├── v0.1.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js └── sub.js HEAD master Branches
  • 15. Git Conceitos Básicos filetree/ ├── doc │ ├── v0.1.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── mult.js └── sub.js Branches HEAD master
  • 16. Git Conceitos Básicos filetree/ ├── doc │ ├── v0.1.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── mult.js └── sub.js Branches filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js HEAD master
  • 17. Git Conceitos Básicos filetree/ ├── doc │ ├── v0.1.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── mult.js └── sub.js Branches HEAD bugfix filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js master
  • 18. Git Conceitos Básicos filetree/ ├── doc │ ├── v0.1.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── mult.js └── sub.js Branches filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js master HEAD bugfix filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ ├── v1.0.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js
  • 19. Git Conceitos Básicos filetree/ ├── doc │ ├── v0.1.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── mult.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js HEAD bugfix filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ ├── v1.0.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js Merge filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js master
  • 20. Git Conceitos Básicos filetree/ ├── doc │ ├── v0.1.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── mult.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ ├── v1.0.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js Merge filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ ├── v1.0.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js HEAD master bugfix
  • 21. Git Conceitos Básicos filetree/ ├── doc │ ├── v0.1.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── mult.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ ├── v1.0.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js Merge filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ ├── v1.0.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js HEAD master
  • 22. Git Conceitos Básicos Tags v0.2 v0.1 filetree/ ├── doc │ ├── v0.1.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── mult.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ ├── v1.0.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js v0.2.1 filetree/ ├── doc │ ├── v0.1.0.txt │ ├── v0.2.0.txt │ ├── v0.6.0.txt │ ├── v1.0.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js* │ └── main.js └── tests ├── add.js* ├── div.js ├── fact.js ├── mult.js └── sub.js HEAD master
  • 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!
  • 24. Git Conceitos Básicos Boas práticas A successfull Git branching model by Vincent Driessen http://nvie.com/posts/a-successful-git-branching-model
  • 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
  • 26. Git Comandos Básicos HEAD filetree/ ├── doc │ ├── v0.1.0.txt │ └── v1.4.0.txt ├── lib │ └── lib1.js ├── README.md ├── src │ ├── calc.js │ └── main.js └── tests ├── add.js ├── mult.js └── sub.js master commit e7c0d3d Staging area / index 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
  • 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
  • 31. Git Comandos Básicos gui, gtk Eye candy... $ git gui $ gitk # commit log # operações de stage e snaphot Windows: SourceTree, TortoiseGit, git-cola, GitEye
  • 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
  • 34. Git Ref tutoriais, cheat sheets Tutoriais ➔ ➔ ➔ ➔ stackoverflow - definite pratical guide http://gitimmersion.com http://git-scm.com/docs/gittutorial http://www.sbf5.com/~cduan/technical/git Cheat sheets ➔ ➔ ➔ ➔ ➔ http://git-scm.com/docs cheat sheet dada http://ktown.kde.org/~zrusin/git/git-cheat-sheet-medium.png http://ndpsoftware.com/git-cheatsheet.html http://git-scm.com/docs/everyday.html
  • 35. Git Hands on! ➔ github.com/nuieee ➔ repo -> workshop-git ➔ copiar clone URL $ git clone git@github.com:nuieee/workshop-git.git
  • 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