Slide 1

Slide 1 text

Controle de versão distribuído e inteligente GIT

Slide 2

Slide 2 text

Quem sou eu?

Slide 3

Slide 3 text

Diego Garcia Pessoal: ● Pai ● Punk Rocker ● Cientista da computação frustrado Profissional: ● Software Engineer na Magazine Luiza Contatos: ● @drgarcia1986

Slide 4

Slide 4 text

Afinal de contas, o que é o GIT?

Slide 5

Slide 5 text

O GIT é: ● Uma ferramenta de controle de versão. ● Open Source. ● Criado por Linus Torvalds. ● Trabalha de forma distribuída. ● Simples e fácil de apreender. ● Extremamente popular. ● Muito material bom disponível.

Slide 6

Slide 6 text

Alguns dos termos e comandos mais comuns e mais importantes

Slide 7

Slide 7 text

Um snapshot do conteúdo inteiro do repositório com informações extras sobre autor do commit, committer e commit pai (se houver) Commit

Slide 8

Slide 8 text

Um ponteiro independente para um commit (que pode adicionar mais commits) Branch

Slide 9

Slide 9 text

Determina em qual branch você está (qual ponteiro você está usando no momento) HEAD

Slide 10

Slide 10 text

Altera o HEAD para alguma branch existente (ou cria uma nova) Checkout

Slide 11

Slide 11 text

Área onde as alterações do repositório local são monitoradas Index

Slide 12

Slide 12 text

Mostra o estado dos arquivos atuais (monitorados ou não) baseado no Index Status

Slide 13

Slide 13 text

Tornar alterações "staged" ou seja, prontas para entrar em um commit Add

Slide 14

Slide 14 text

Clone Cria um clone completo de um repositório remoto em um repositório local

Slide 15

Slide 15 text

Atualiza o repositório remoto com as alterações locais Push

Slide 16

Slide 16 text

Pull Atualiza o repositório local com as alterações remotas

Slide 17

Slide 17 text

Atualiza as referências de branches e tags remotas para o repositório local Fetch

Slide 18

Slide 18 text

Um ponteiro estático para um commit (pode ser imaginado como um label) Tag

Slide 19

Slide 19 text

Estratégia de fusão que cria um novo commit com as diferenças entre as branches Merge

Slide 20

Slide 20 text

Estratégia de fusão que reorganiza os commits aplicando os commits de uma branch após o commit de outra Rebase

Slide 21

Slide 21 text

Representação gráfica do Grafo de um repositório

Slide 22

Slide 22 text

Fonte: Git Pocket Guide: A Working Introduction

Slide 23

Slide 23 text

Um fluxo simples e comum de trabalho

Slide 24

Slide 24 text

Adicionando uma nova feature ● Atualiza a "master" local: $ git checkout master $ git pull ● Cria a branch nova: $ git checkout -b feature-x ● Realiza as alterações na base de código ● Coloque as alterações em stage $ git add main.c feature-x.c ● Crie o commit $ git commit -m 'Add Feature X on main file' ● Envie as alterações para o remoto: $ git push -u origin feature-x

Slide 25

Slide 25 text

Alguns comandos interessantes

Slide 26

Slide 26 text

Será muito comum consultar a árvore/grafo de commits log Sugestão: git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

Slide 27

Slide 27 text

diff Extremamente útil para ver o conteúdo em index ainda não "staged" Dica: use a opção --staged para ver o que irá entrar no próximo commit

Slide 28

Slide 28 text

Permite aplicar o conjunto de alterações de um commit como um novo commit na branch atual cherry-pick

Slide 29

Slide 29 text

Rebase *i*nterativo, permite fazer alterações sofisticadas em um conjunto de commits (e.g. squad, re-word, delete, etc) rebase -i

Slide 30

Slide 30 text

Remove o commit anterior e cria um novo com o conteúdo do anterior mais as alterações "staged" atuais. ammend

Slide 31

Slide 31 text

Boas Práticas Baseadas somente na minha opinião e minhas experiências

Slide 32

Slide 32 text

São mais fáceis para serem revisados, mais fáceis para serem localizados (capriche na mensagem) e mais fáceis de serem aproveitados Commits pequenos com apenas um objetivo

Slide 33

Slide 33 text

Nunca suba lixo ou arquivos protegidos para o repositório remoto .gitignore

Slide 34

Slide 34 text

Tente manter a árvore o mais limpa possível (mas às vezes é necessário) Evite branches de branches

Slide 35

Slide 35 text

Lembre-se, mantenha a árvore limpa, um commit de "fix typo foo" sendo que esse typo foi feito na branch corrente, não faz sentido. Faça squash de commits não significativos

Slide 36

Slide 36 text

A estratégia de merge pode bagunçar a árvore de commits e dificultar a leitura do histórico do projeto. Prefira sempre rebase ao invés de merge

Slide 37

Slide 37 text

Mantenha sempre uma referência para consulta ou rebuild de seus releases com uma TAG. Sempre faça seus releases baseados em TAGs

Slide 38

Slide 38 text

Onde conseguir mais informação?

Slide 39

Slide 39 text

Pro GIT ● Ebook Gratuito. ● Disponível em PDF, Mobi, ePub e Web. ● Tradução para o português disponível (somente WEB) ● https://git-scm.com/book/en/v2

Slide 40

Slide 40 text

Porém, o mais importante é:

Slide 41

Slide 41 text

A melhor maneira de aprender GIT é Se fudendo Usando.

Slide 42

Slide 42 text

Obrigado! dúvidas?