descomplicando o controle de versão com git

76
Descomplicando o controle de versão com Git Humberto Streb

Upload: humberto-streb

Post on 25-Jan-2015

117 views

Category:

Technology


0 download

DESCRIPTION

Tutorial de utilização do git, explicando passo a passo como fazer commits, pushes, merges, diffs, criar branchs, tags, adicionar um repositório remoto entre outras features do git.

TRANSCRIPT

Page 1: Descomplicando o controle de versão com git

Descomplicando o controle de versão com Git

Humberto Streb

Page 2: Descomplicando o controle de versão com git

2

Humberto Streb

Bel. Sistemas de Informação

Desenvolvedor Java

Entusiasta Linux

Curioso

github.com/hstreb

[email protected]

Page 3: Descomplicando o controle de versão com git

3

Controle de versão

“É um software com a finalidade de gerenciar diferentes versões no desenvolvimento de um

documento qualquer.”

[Wikipédia]

Page 4: Descomplicando o controle de versão com git

4

Projetos pequenos

Page 5: Descomplicando o controle de versão com git

5

Projetos grandes

Page 6: Descomplicando o controle de versão com git

6

Vantagens

Histórico de alterações

Facilidade de reverter alterações

Facilidade de ramificar o projeto

Facilidade de marcar (tag) dados

Backup do código fonte

Page 7: Descomplicando o controle de versão com git

7

Git

“É um sistema de controle de versão distribuido gratuito e open source desenhado

para lidar com tudo, desde pequenos até grandes projetos com rapidez e eficiência.”

[git-scm.com]

Page 8: Descomplicando o controle de versão com git

8

Git

Foco em velocidade

Foco no design simples

Suporte robusto a desenvolvimento não linear (milhares de branches paralelos)

Totalmente distribuído

Capaz de lidar eficientemente com grandes projetos como o kernel do Linux

Page 9: Descomplicando o controle de versão com git

9

Empresas que utilizam Git

Page 10: Descomplicando o controle de versão com git

10

Configuração

$ git config --global user.name "Humberto Streb"

$ git config --global user.email "[email protected]"

Page 11: Descomplicando o controle de versão com git

11

Entendendo os estados

Page 12: Descomplicando o controle de versão com git

12

Área de trabalho

É onde são carregados os arquivos vindo de um repositório (checkout). Nela estão os arquivos

vigentes.

Page 13: Descomplicando o controle de versão com git

13

Área de preparação

É uma área temporária, que contem as informações do próximo commit.

Page 14: Descomplicando o controle de versão com git

14

Diretório do Git

É onde são armazenados as informações sobre o último commit.

Page 15: Descomplicando o controle de versão com git

15

Mãos na massa

Page 16: Descomplicando o controle de versão com git

16

init

Esse comando irá inciar um repositório local na pasta onde foi executado

Page 17: Descomplicando o controle de versão com git

17

init

$ mkdir tutorial-git

$ cd tutorial-git

$ git init

Initialized empty Git repository in .../tutorial-git/.git/

Page 18: Descomplicando o controle de versão com git

18

status

Mostra o estado atual do projeto

Page 19: Descomplicando o controle de versão com git

19

status

$ git status

# On branch master

#

# Initial commit

#

nothing to commit (create/copy files and use "git add" to track)

Page 20: Descomplicando o controle de versão com git

20

Criamos a classe App.java

Page 21: Descomplicando o controle de versão com git

21

status

$ git status

# On branch master

#

# Initial commit

#

# Untracked files:

# (use "git add <file>..." to include in what will be committed)

#

# App.java

nothing added to commit but untracked files present (use "git add" to track)

Page 22: Descomplicando o controle de versão com git

22

add

Adiciona os arquivos para o índice do git.

Page 23: Descomplicando o controle de versão com git

23

add

$ git add .

$ git status

# On branch master

#

# Initial commit

#

# Changes to be committed:

# (use "git rm --cached <file>..." to unstage)

#

# new file: App.java

#

Page 24: Descomplicando o controle de versão com git

24

commit

Salva as alterações contidas no índice para o repositório do git

Page 25: Descomplicando o controle de versão com git

25

commit

$ git commit -m "Iniciando o projeto"

[master (root-commit) aab8232] Iniciando o projeto

1 file changed, 7 insertions(+)

create mode 100644 App.java

Page 26: Descomplicando o controle de versão com git

26

commit

$ git commit -m "Iniciando o projeto"

[master (root-commit) aab8232] Iniciando o projeto

1 file changed, 7 insertions(+)

create mode 100644 App.java

$ git status

# On branch master

nothing to commit, working directory clean

Page 27: Descomplicando o controle de versão com git

27

Criando teste com valores fixos

Page 28: Descomplicando o controle de versão com git

28

commit

git add .

$ git commit -m "Teste com valores fixos"

[master 0dc82d0] Teste com valores fixos

1 file changed, 5 insertions(+), 1 deletion(-)

Page 29: Descomplicando o controle de versão com git

29

log

Mostra o histórico de commits

Page 30: Descomplicando o controle de versão com git

30

log

$ git log

commit 0dc82d02b8552dea278a1dfa118d3d722a33f380

Author: Humberto Streb <[email protected]>

Date: Thu Sep 12 10:52:29 2013 -0300

Teste com valores fixos

commit aab8232b734b7dbd133f07d13afc2fbf642183d1

Author: Humberto Streb <[email protected]>

Date: Thu Sep 12 10:48:48 2013 -0300

Iniciando o projeto

Page 31: Descomplicando o controle de versão com git

31

Adicionando leitura do teclado

Page 32: Descomplicando o controle de versão com git

32

add e commit no mesmo comando

git commit -a -m "Ler do teclado"

1 file changed, 6 insertions(+), 1 deletion(-)

Page 33: Descomplicando o controle de versão com git

33

tag

Serve como marcação para um determinado momento do projeto

Page 34: Descomplicando o controle de versão com git

34

tag

$ git tag v-1

$ git tag

v-1

Page 35: Descomplicando o controle de versão com git

35

branch

Esse comando cria uma ramificação do projeto

Page 36: Descomplicando o controle de versão com git

36

branch

$ git branch

* master

$ git branch tratarExcecao

$ git checkout tratarExcecao

Switched to branch 'tratarExcecao'

$ git branch

master

* tratarExcecao

Page 37: Descomplicando o controle de versão com git

37

$ git checkout -b tratarExcecao

branch

Page 38: Descomplicando o controle de versão com git

38

Adicionando o tratamento de exceções no branch

Page 39: Descomplicando o controle de versão com git

39

$ git commit -a -m "Tratamento exceção"

[tratarExcecao ecf16a9] Tratamento exceção

1 file changed, 9 insertions(+), 3 deletions(-)

Adicionando o tratamento de exceções no branch

Page 40: Descomplicando o controle de versão com git

40

checkout

É o comando responsável por “atualizar” para o branch que deseja ir.

Page 41: Descomplicando o controle de versão com git

41

checkout para o master

$ git checkout master

Switched to branch 'master'

Page 42: Descomplicando o controle de versão com git

42

O arquivo App.java voltou para o formato anterior

Page 43: Descomplicando o controle de versão com git

43

Adição do método processaResposta

Page 44: Descomplicando o controle de versão com git

44

$ git commit -a -m "Adicção método processaResposta"

[master 4c163d6] Adicção método processaResposta

1 file changed, 4 insertions(+)

Adição do método processaResposta

Page 45: Descomplicando o controle de versão com git

45

Corrigindo o último commit

$ git log

...

Adicção método processaResposta

$ git commit --amend -m "Adição método processaResposta"

[master 9deaa21] Adição método processaResposta

1 file changed, 4 insertions(+)

$ git log

...

Adição método processaResposta

Page 46: Descomplicando o controle de versão com git

46

dif

Mostra as diferenças entre o branch atual e o destinatário

Page 47: Descomplicando o controle de versão com git

47

$ git checkout tratarExcecao

Switched to branch 'tratarExcecao'

dif

Page 48: Descomplicando o controle de versão com git

48

$ git diff master

diff --git a/App.java b/App.java

index 3edc65f..15b4da3 100644

--- a/App.java

+++ b/App.java

@@ -4,14 +4,16 @@ public class App {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

-

- System.out.println("Digite um numero:");

- int numero = scanner.nextInt();

- processaResultado(numero);

- }

-

- private static void processaResultado(int numero) {

+ int numero;

+ try {

+ System.out.println("Digite um número:");

+ numero = scanner.nextInt();

+ } catch (Exception e) {

+ System.out.println("Não foi possível ler o valor digitado! O valor será 0.");

+ numero = 0;

+ }

+

int dobro = numero * numero;

System.out.println("O dobro: " + dobro);

Page 49: Descomplicando o controle de versão com git

49

merge

Responsável por fazer a concatenação das diferenças entre os branches

Page 50: Descomplicando o controle de versão com git

50

Fazendo merge com o master

$ git merge master

Auto-merging App.java

Merge made by the 'recursive' strategy.

App.java | 4 ++++

1 file changed, 4 insertions(+)

Page 51: Descomplicando o controle de versão com git

51

Adicionando o método lerInteiro

Page 52: Descomplicando o controle de versão com git

52

Adicionando o método lerInteiro

$ git checkout master

Switched to branch 'master'

$ git commit -a -m "Adição método lerInteiro"

[master e41e17b] Adição método lerInteiro

1 file changed, 9 insertions(+), 4 deletions(-)

Page 53: Descomplicando o controle de versão com git

53

Fazendo merge com o master (2)

$ git checkout tratarExcecao

Switched to branch 'tratarExcecao'

$ git merge master

Auto-merging App.java

CONFLICT (content): Merge conflict in App.java

Automatic merge failed; fix conflicts and then commit the result.

Page 54: Descomplicando o controle de versão com git

54

Page 55: Descomplicando o controle de versão com git

55

Consertar o método lerInteiro

Page 56: Descomplicando o controle de versão com git

56

Fazer o merge do branch para o master

$ git commit -a -m "Tratar exceção no método lerInteiro"

[tratarExcecao c7053bb] Tratar exceção no método lerInteiro

$ git checkout master

Switched to branch 'master'

$ git merge tratarExcecao

Updating e41e17b..c7053bb

Fast-forward

App.java | 10 +++++++---

1 file changed, 7 insertions(+), 3 deletions(-)

Page 57: Descomplicando o controle de versão com git

57

Colaborando

Page 58: Descomplicando o controle de versão com git

58

remote

É utilizado para adicionar um repositório remoto ao projeto

Page 59: Descomplicando o controle de versão com git

59

remote

$ git remote add origin [email protected]:hstreb/tutorial-git.git

Page 60: Descomplicando o controle de versão com git

60

clone

É utilizado para “clonar” um repositório.

Page 61: Descomplicando o controle de versão com git

61

clone

$ git clone [email protected]:hstreb/tutorial-git.git

Cloning into 'projeto'...

remote: Counting objects: 27, done.

remote: Compressing objects: 100% (10/10), done.

remote: Total 27 (delta 9), reused 24 (delta 9)

Receiving objects: 100% (27/27), done.

Resolving deltas: 100% (9/9), done.

Page 62: Descomplicando o controle de versão com git

62

push

Este comando envia as alterações contidas no repositório local para o repositório remoto

Page 63: Descomplicando o controle de versão com git

63

push

$ git push origin master

Warning: Permanently added the RSA host key for IP address '192.30.252.131' to the list of known hosts.

Counting objects: 24, done.

Delta compression using up to 2 threads.

Compressing objects: 100% (16/16), done.

Writing objects: 100% (24/24), 2.26 KiB, done.

Total 24 (delta 9), reused 0 (delta 0)

To [email protected]:hstreb/tutorial-git.git

* [new branch] master -> master

Page 64: Descomplicando o controle de versão com git

64

push branches

$ git push origin tratarExcecao

Warning: Permanently added the RSA host key for IP address '192.30.252.130' to the list of known hosts.

Total 0 (delta 0), reused 0 (delta 0)

To [email protected]:hstreb/tutorial-git.git

* [new branch] tratarExcecao -> tratarExcecao

Page 65: Descomplicando o controle de versão com git

65

pull

É utilizado para baixar as alterações contidas no repositório remoto

Page 66: Descomplicando o controle de versão com git

66

pull

$ git pull origin master

From github.com:hstreb/tutorial-git

* branch master -> FETCH_HEAD

Updating c7053bb..85cde87

Fast-forward

README.md | 9 +++++++++

1 file changed, 9 insertions(+)

create mode 100644 README.md

Page 67: Descomplicando o controle de versão com git

67

stash

Stash é utilizado para adicionar várias alterações em uma pilha, que é armazenada

localmente

Page 68: Descomplicando o controle de versão com git

68

stash Adicionar alterações

$ git stash

Saved working directory and index state \

"WIP on master: 049d078 added the index file"

HEAD is now at 049d078 added the index file

(To restore them type "git stash apply")

Page 69: Descomplicando o controle de versão com git

69

stash listar alterações já realizadas

$ git stash list

stash@{0}: WIP on master: 049d078 added the index file

stash@{1}: WIP on master: c264051... Revert "added file_size"

stash@{2}: WIP on master: 21d80a5... added number to log

Page 70: Descomplicando o controle de versão com git

70

stash aplicar alterações

$ git stash apply

# On branch master

# Changes not staged for commit:

# (use "git add <file>..." to update what will be committed)

#

# modified: App.java

#

Page 71: Descomplicando o controle de versão com git

71

stash aplicar e retirar da lista as alterações

$ git stash pop

# On branch master

# Changes not staged for commit:

# (use "git add <file>..." to update what will be committed)

#

# modified: App.java

#

Page 72: Descomplicando o controle de versão com git

72

stash aplicar alterações mais antigas

$ git stash apply@{2}

# On branch master

# Changes not staged for commit:

# (use "git add <file>..." to update what will be committed)

#

# modified: App.java

#

Page 73: Descomplicando o controle de versão com git

73

stash aplicar alterações mais antigas

{0} representa o último stash que você fez; {1} representa penúltimo, e assim por diante. Essa sintaxe também aparece em outros lugares (show, por exemplo).

Page 74: Descomplicando o controle de versão com git

74

projeto

Page 75: Descomplicando o controle de versão com git

75

Links

http://git-scm.comhttps://github.com/hstreb/tutorial-git

Page 76: Descomplicando o controle de versão com git

76

Muito obrigado!