nuieee - workshop de git

37
Workshop de Git NuIEEE [email protected] por José Bateira [email protected]

Upload: ze-bateira

Post on 20-Jan-2015

117 views

Category:

Technology


0 download

DESCRIPTION

Workshop de Git pelo Núcleo Universitário do Porto IEEE

TRANSCRIPT

Page 1: NuIEEE - Workshop de Git

Workshop de

GitNuIEEE

[email protected] José [email protected]

Page 2: NuIEEE - Workshop de Git

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!

Page 3: NuIEEE - Workshop de Git

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

Page 4: NuIEEE - Workshop de Git

Introdução

SCM - Source Control Managment

CVS

Subversion (svn)

Git

Mercurial

Introdução

RCS - Para além do Git

BitKeeper

Page 5: NuIEEE - Workshop de Git

Introdução

SCM - Source Control ManagmentGit

Desenvolvido em 2005 porLinus Torvalds (Criador do GNU/Linux)

Optimizado paraDesenvolvimento DistribuídoProjetos de grandes dimensõesJuntar código (merge) complexoFazer experiências (branchs)

Page 6: NuIEEE - Workshop de Git

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/directory

working tree

Page 7: NuIEEE - Workshop de Git

Git

Conceitos Básicos

Gestão de alterações da working tree

EditarAdicionar

Eliminar

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

Page 8: NuIEEE - Workshop de Git

Git

Conceitos Básicos

Representação em Grafo

commit

e7c0d3d

commita1f84f5

commiteec9901

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│ └── 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│ ├── 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

commit

Page 9: NuIEEE - Workshop de Git

Git

Conceitos Básicos

Representação em Grafo

commite7c0d3d

commita1f84f5

commiteec9901

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│ └── 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│ ├── 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

commitf7c5b39

commit

Page 10: NuIEEE - Workshop de Git

commita1f84f5

Git

Conceitos Básicos

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│ └── 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│ ├── 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

HEAD -> Onde estou

HEAD

HEAD

commite7c0d3d

commiteec9901

commitf7c5b39

Page 11: NuIEEE - Workshop de Git

Git

Conceitos Básicos

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│ └── 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│ ├── 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

HEAD -> Onde estou

HEAD

HEAD

commita1f84f5

commite7c0d3d

commiteec9901

commitf7c5b39

Page 12: NuIEEE - Workshop de Git

commiteec9901

Git

Conceitos Básicos

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│ └── 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│ ├── 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

HEAD -> Onde estouHEAD

HEAD

commita1f84f5

commite7c0d3dcommit

f7c5b39

Page 13: NuIEEE - Workshop de Git

Git

Conceitos Básicos

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│ └── 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│ ├── 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

Branch -> marker

HEAD

master

commite7c0d3d

bugfix

Branches

Page 14: NuIEEE - Workshop de Git

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

Page 15: NuIEEE - Workshop de Git

Git

Conceitos Básicos

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│ └── v1.4.0.txt├── lib│ └── lib1.js├── README.md├── src│ ├── calc.js│ └── main.js└── tests ├── add.js └── sub.js

HEAD

master

Branches

Page 16: NuIEEE - Workshop de Git

Git

Conceitos Básicos

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│ └── v1.4.0.txt├── lib│ └── lib1.js├── README.md├── src│ ├── calc.js│ └── main.js└── tests ├── add.js └── sub.js

HEAD

master

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

Branches

Page 17: NuIEEE - Workshop de Git

Git

Conceitos Básicos

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│ └── v1.4.0.txt├── lib│ └── lib1.js├── README.md├── src│ ├── calc.js│ └── main.js└── tests ├── add.js └── sub.js

HEAD

master

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

bugfix

Branches

Page 18: NuIEEE - Workshop de Git

Git

Conceitos Básicos

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│ └── 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│ ├── 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

master

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

Branches

Page 19: NuIEEE - Workshop de Git

Git

Conceitos Básicos

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│ └── 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│ ├── 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

master

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

Page 20: NuIEEE - Workshop de Git

Git

Conceitos Básicos

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│ └── 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│ ├── 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

masterfiletree/├── 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

Page 21: NuIEEE - Workshop de Git

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│ ├── 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

masterfiletree/├── 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.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│ └── 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

Page 22: NuIEEE - Workshop de Git

Git

Conceitos Básicos

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│ └── 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│ ├── 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

masterfiletree/├── 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

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

Tags

v0.1

v0.2

v0.2.1

Page 23: NuIEEE - Workshop de Git

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!

Page 24: NuIEEE - Workshop de Git

Git

Conceitos Básicos Boas práticas

A successfull Git branching model

by Vincent Driessen

http://nvie.com/posts/a-successful-git-branching-model

Page 25: NuIEEE - Workshop de Git

Git

Comandos Básicos

Enough talking… where’s the code?!

$ git init # cria a pasta .git

$ git add <file> # adicionar ficheiros para o commit

$ git commit # commit

init, add, status, commit

$ git status # estado da working tree e do index

Page 26: NuIEEE - Workshop de Git

Git

Comandos Básicos

commite7c0d3d

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

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

HEAD

master

Staging area / index

Page 27: NuIEEE - Workshop de Git

Git

Comandos Básicos 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

HEAD

master

commite7c0d3d

$ git status# Untracked files:

# lib/lib2.js# tests/div.js

$ git status# Changes to be committed:

# new file: lib/lib2.js# new file: tests/div.js

Staging Area / Index

$ git statusnothing to commit, working directory clean

git add -A git commit

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

Page 28: NuIEEE - Workshop de Git

Git

Comandos Básicos 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

HEAD

master

commite7c0d3d

$ git status# Untracked files:

# lib/lib2.js# tests/div.js

$ git status# Changes to be committed:

# new file: lib/lib2.js# new file: tests/div.js

Staging Area / Index

$ git statusnothing to commit, working directory clean

git add -A git commit

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

Page 29: NuIEEE - Workshop de Git

Git

Comandos Básicos

$ git reset <file> # oposto de “git add”

$ git diff # ver alterações que ainda não estão no index

reset, diff, log, reflog

$ git reflog # ver log de todos os comandos feitos

$ git log # ver log de commits até ao momento

Page 30: NuIEEE - Workshop de Git

Git

Comandos Básicos

$ 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

branch, checkout, merge

Page 31: NuIEEE - Workshop de Git

Git

Comandos Básicos

$ gitk # operações de stage e snaphot

gui, gtk

$ git gui # commit log

Eye candy...

Windows: SourceTree, TortoiseGit, git-cola, GitEye

Page 32: NuIEEE - Workshop de Git

Git

Comandos Básicos

$ git clone <repo_url> # 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

clone, push, pull

Hosting de repos: Github, BitBucket, Assembla, Google Code, SourceForge

Page 33: NuIEEE - Workshop de Git

$ git help <command> # todas as opções de um comando# ex: git help commit

Git

Comandos Básicos help!

$ git help # help! lista de comandos mais usados

Page 35: NuIEEE - Workshop de Git

Git

Hands on!

$ git clone [email protected]:nuieee/workshop-git.git

➔ github.com/nuieee

➔ repo -> workshop-git

➔ copiar clone URL

Page 36: NuIEEE - Workshop de 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

Page 37: NuIEEE - Workshop de Git

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