descomplicando o controle de versão com git

Post on 25-Jan-2015

117 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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

Descomplicando o controle de versão com Git

Humberto Streb

2

Humberto Streb

Bel. Sistemas de Informação

Desenvolvedor Java

Entusiasta Linux

Curioso

github.com/hstreb

hstreb@gmail.com

3

Controle de versão

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

documento qualquer.”

[Wikipédia]

4

Projetos pequenos

5

Projetos grandes

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

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]

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

9

Empresas que utilizam Git

10

Configuração

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

$ git config --global user.email "hstreb@gmail.com"

11

Entendendo os estados

12

Área de trabalho

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

vigentes.

13

Área de preparação

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

14

Diretório do Git

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

15

Mãos na massa

16

init

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

17

init

$ mkdir tutorial-git

$ cd tutorial-git

$ git init

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

18

status

Mostra o estado atual do projeto

19

status

$ git status

# On branch master

#

# Initial commit

#

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

20

Criamos a classe App.java

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)

22

add

Adiciona os arquivos para o índice do 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

#

24

commit

Salva as alterações contidas no índice para o repositório do 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

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

27

Criando teste com valores fixos

28

commit

git add .

$ git commit -m "Teste com valores fixos"

[master 0dc82d0] Teste com valores fixos

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

29

log

Mostra o histórico de commits

30

log

$ git log

commit 0dc82d02b8552dea278a1dfa118d3d722a33f380

Author: Humberto Streb <hstreb@gmail.com>

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

Teste com valores fixos

commit aab8232b734b7dbd133f07d13afc2fbf642183d1

Author: Humberto Streb <hstreb@gmail.com>

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

Iniciando o projeto

31

Adicionando leitura do teclado

32

add e commit no mesmo comando

git commit -a -m "Ler do teclado"

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

33

tag

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

34

tag

$ git tag v-1

$ git tag

v-1

35

branch

Esse comando cria uma ramificação do projeto

36

branch

$ git branch

* master

$ git branch tratarExcecao

$ git checkout tratarExcecao

Switched to branch 'tratarExcecao'

$ git branch

master

* tratarExcecao

37

$ git checkout -b tratarExcecao

branch

38

Adicionando o tratamento de exceções no branch

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

40

checkout

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

41

checkout para o master

$ git checkout master

Switched to branch 'master'

42

O arquivo App.java voltou para o formato anterior

43

Adição do método processaResposta

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

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

46

dif

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

47

$ git checkout tratarExcecao

Switched to branch 'tratarExcecao'

dif

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

49

merge

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

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(+)

51

Adicionando o método lerInteiro

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

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.

54

55

Consertar o método lerInteiro

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

57

Colaborando

58

remote

É utilizado para adicionar um repositório remoto ao projeto

59

remote

$ git remote add origin git@github.com:hstreb/tutorial-git.git

60

clone

É utilizado para “clonar” um repositório.

61

clone

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

62

push

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

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 git@github.com:hstreb/tutorial-git.git

* [new branch] master -> master

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 git@github.com:hstreb/tutorial-git.git

* [new branch] tratarExcecao -> tratarExcecao

65

pull

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

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

67

stash

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

localmente

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

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

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

#

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

#

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

#

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

74

projeto

75

Links

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

76

Muito obrigado!

top related