nuieee - workshop de git
DESCRIPTION
Workshop de Git pelo Núcleo Universitário do Porto IEEETRANSCRIPT
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
SCM - Source Control Managment
CVS
Subversion (svn)
Git
Mercurial
Introdução
RCS - Para além do Git
BitKeeper
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)
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
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
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
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
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
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
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
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
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│ ├── 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
$ 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
Git
Ref
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
tutoriais, cheat sheets
Git
Hands on!
$ git clone [email protected]:nuieee/workshop-git.git
➔ github.com/nuieee
➔ repo -> workshop-git
➔ copiar clone URL
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