descomplicando o controle de versão com git
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
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 "[email protected]"
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 <[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
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
60
clone
É utilizado para “clonar” um repositório.
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.
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 [email protected]: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 [email protected]: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!