Slide 1

Slide 1 text

Tutorial Git

Slide 2

Slide 2 text

Quem somos Renato e Débora Centro de Informática - UFPE Not git experts

Slide 3

Slide 3 text

Labcodes Software studio de Recife para o mundo Tecnologias que trabalhamos Labcodes e Comunidade

Slide 4

Slide 4 text

Massa, e git?

Slide 5

Slide 5 text

Quem ja trabalhou com git? Quem ja teve dificuldades?
 Quem ja apagou o repositorio?

Slide 6

Slide 6 text

"Isto é Git. Ele controla o trabalho colaborativo em projetos através de um belo modelo distribuído de árvore de teoria dos grafos. Massa, como usamos? Nem ideia. Decore este comandos e digite-os para sincronizar tudo. Se acontecerem erros, salve o seu trabalho em outro lugar, delete o projeto e download uma nova cópia do repositório."

Slide 7

Slide 7 text

Roteiro Primeiros passos Git básico Entendendo Git Git branching Branching models/Git workflows Desfazendo coisas Dicas e truques

Slide 8

Slide 8 text

Primeiros passos

Slide 9

Slide 9 text

Primeiros passos Controle de versão Git background Instalando Git

Slide 10

Slide 10 text

Controle de versão Uma estratégia de backup.
 
 O controle de versão é um sistema que registra as mudanças feitas em um arquivo ou um conjunto de arquivos ao longo do tempo de forma que você possa recuperar versões específicas. 
 


Slide 11

Slide 11 text

Controle de versão Uma estratégia de backup.
 
 O controle de versão é um sistema que registra as mudanças feitas em um arquivo ou um conjunto de arquivos ao longo do tempo de forma que você possa recuperar versões específicas. 
 


Slide 12

Slide 12 text

Controle de versão Uma estratégia de backup.
 
 O controle de versão é um sistema que registra as mudanças feitas em um arquivo ou um conjunto de arquivos ao longo do tempo de forma que você possa recuperar versões específicas. 
 Pode ser usado por qualquer um.

Slide 13

Slide 13 text

Controle de versão E para trabalhar em equipes? Sistemas de Controle de Versão Centralizados.

Slide 14

Slide 14 text

Controle de versão Sistemas de Controle de Versão Distribuídos.
 
 Git!

Slide 15

Slide 15 text

Git histórico e background Rompimento da comunidade Linux com a empresa do sistema de controle de versão distribuído usado (BitKeeper). Criação do Git por Linus Torvalds. Características: Velocidade e Design simples Suporte robusto a desenvolvimento não linear Totalmente distribuído Lida eficientemente com grandes projetos

Slide 16

Slide 16 text

Git Esqueça os outros VCSs que você já usou. A maior diferença está na forma de tratar os dados. SVN: Armazena a informação como uma lista de mudanças por arquivo. Salva as diferenças. Git: Considera que os dados são conjuntos de snapshots, ou seja, captura o estado atual do seu projeto a cada mudança feita (commit).

Slide 17

Slide 17 text

Git

Slide 18

Slide 18 text

Git Velocidade para realizar operações no Git, que precisam apenas de recursos e arquivos locais Ex: navegar no histórico do projeto Liberdade para trabalhar e fazer commits offline. Integridade. Não é possível mudar nada sem que o Git tenha conhecimento. Assim informação não é perdida ou corrompida.

Slide 19

Slide 19 text

Instalando git LINUX $ apt-get install git

Slide 20

Slide 20 text

Instalador gráfico do Git: http://sourceforge.net/projects/git-osx- installer/ Via MacPorts (http://www.macports.org) $ sudo port install git-core +svn +doc +bash_completion +gitweb Instalando git MAC

Slide 21

Slide 21 text

Projeto msyspit http://msysgit.github.com Após concluir a instalação, você terá tanto uma versão command line (linha de comando, incluindo um cliente SSH que será útil depois) e uma GUI padrão. Instalando git WINDOWS

Slide 22

Slide 22 text

git config Permite ler e definir variáveis de configuração Diferentes níveis de armazenamento das variáveis: /etc/gitconfig ~/.gitconfig .git/config Configurações iniciais WINDOWS

Slide 23

Slide 23 text

$ git config --global user.name “Débora Correia" $ git config --global user.email [email protected] $ git config --global color.ui auto $ git config --list $ git help config

Slide 24

Slide 24 text

Git básico

Slide 25

Slide 25 text

Git básico Criar um repositório Adicionar arquivos ao repositório Commits Trabalhando com repositórios remotos

Slide 26

Slide 26 text

Criar um repositório EM UM DIRETÓRIO EXISTENTE git init

Slide 27

Slide 27 text

basics $ git init Initialized empty Git repository in /Users/Debs/basics/.git/

Slide 28

Slide 28 text

Criar um repositório CLONAR UM REPOSITÓRIO EXISTENTE git clone

Slide 29

Slide 29 text

$ git clone [email protected]:labcodes/git-basics-tutorial.git $ git clone [email protected]:labcodes/git-basics-tutorial.git my- project

Slide 30

Slide 30 text

Adicionar arquivos OS TRÊS ESTADOS Staging area/index Repository

Slide 31

Slide 31 text

Adicionar arquivos OS TRÊS ESTADOS Repository checkout the project git add git commit Staging area/index

Slide 32

Slide 32 text

Adicionar arquivos STATUS

Slide 33

Slide 33 text

Adicionar arquivos STATUS No repositório criado, veja o estado Crie um arquivo README.md. Adicione o arquivo para staging area Commit o arquivo

Slide 34

Slide 34 text

$ git status # Crie arquivo $ git add $ git commit

Slide 35

Slide 35 text

Adicionar arquivos MONITORANDO NOVOS ARQUIVOS Crie o arquivo index.html e adicione na staged area

Slide 36

Slide 36 text

$ git add index.html $ git status

Slide 37

Slide 37 text

Adicionar arquivos MONITORANDO ARQUIVOS MODIFICADOS Modificar o arquivo existente (README) e adicionar em staged area.
 
 Modificar novamente o mesmo arquivo.

Slide 38

Slide 38 text

$ git status $ git add $ git commit

Slide 39

Slide 39 text

Adicionar arquivos VISUALIZANDO DIFERENÇAS Verificar o diff entre o arquivo alterado e o que está commitado (repositório). Ver a diferença entre o que tá em staged e o já commitado (repositório) Adicionar por partes

Slide 40

Slide 40 text

$ git status $ git diff $ git diff --staged, $ git add -p .

Slide 41

Slide 41 text

Adicionar arquivos FAZENDO COMMITS Commitar Apagar arquivo do repositório

Slide 42

Slide 42 text

$ git commit $ git commit -m “Commit message” $ git rm index.html

Slide 43

Slide 43 text

Commits FAZENDO COMMITS Veja o histórico de commits do repositório Veja o grafo do repositório

Slide 44

Slide 44 text

$ git log $ git log --pretty=oneline $ git log --graph

Slide 45

Slide 45 text

Repositórios remotos EXIBINDO SEUS REMOTOS

Slide 46

Slide 46 text

$ git remote origin $ git remote -v origin git://github.com/schacon/ticgit.git (fetch) origin git://github.com/schacon/ticgit.git (push) $ git remote add renato [email protected]:renatooliveira/git-basics- tutorial.git $ git fetch origin $ git pull origin master $ git push origin master

Slide 47

Slide 47 text

Ufa!

Slide 48

Slide 48 text

Resumo O que é um controle de versão Git é um controle de versão distribuído Instalar e configurar Criar repositórios Adicionar, acompanhar, commitar arquivos Trabalhar com repositórios remotos

Slide 49

Slide 49 text

Entendendo Git

Slide 50

Slide 50 text

Entendendo Git Como Git funciona SHA1 Objetos Git: files, trees, commits, tags

Slide 51

Slide 51 text

Comandos “Porcelain” Commands git add, git commit, git push, git pull, git branch, git checkout, git merge, … “Plumbing” Commands git cat-file, git hash-object, git count-objects, …

Slide 52

Slide 52 text

O segredo pra aprender Git não é decorar os comandos, mas entender seu modelo.

Slide 53

Slide 53 text

https://app.pluralsight.com/library/courses/how-git-works/

Slide 54

Slide 54 text

https://app.pluralsight.com/library/courses/how-git-works/

Slide 55

Slide 55 text

Git é um sistema de controle de versão distribuído

Slide 56

Slide 56 text

Git é um sistema de controle de versão

Slide 57

Slide 57 text

Git é um content tracker

Slide 58

Slide 58 text

Git é um persistent map

Slide 59

Slide 59 text

Git é um map Valores e chaves Os valores são o conteúdo. Qualquer sequencia de byte. Chaves são hashes(checksum) SHA1 Único Praticamente impossível de ser repetido

Slide 60

Slide 60 text

git-tutorial $ git hash-object "Python Brasil" fatal: Cannot open 'Python Brasil': No such file or directory git-tutorial $ echo "Python Brasil" Python Brasil git-tutorial $ echo "Python Brasil" | git hash-object --stdin bbf29edf5f31251c46279b764cf4fed25519b429

Slide 61

Slide 61 text

Todo objeto em Git tem seu próprio SHA1

Slide 62

Slide 62 text

Git é um persistent map

Slide 63

Slide 63 text

Git é um persistent map De onde vem a persistência? Tudo tá sendo salvo em algum lugar.

Slide 64

Slide 64 text

$ git-tutorial $ echo "Python Brasil" | git hash-object —stdin -w $ git init $ ls -a $ open .git

Slide 65

Slide 65 text

No content

Slide 66

Slide 66 text

$ git cat-file bbf29edf5f31251c46279b764cf4fed25519b429 -t blob $ git cat-file bbf29edf5f31251c46279b764cf4fed25519b429 -p Python Brasil

Slide 67

Slide 67 text

Git é um persistent map

Slide 68

Slide 68 text

Git é um content tracker

Slide 69

Slide 69 text

No content

Slide 70

Slide 70 text

Objetos de Git 0ca1 5bf3 /

Slide 71

Slide 71 text

Objetos de Git 0ca1 5bf3 / README.md 30a7 Repositório usado para o tutorial de Git na Python Brasil 2016 9219 … bf37 index.html css 2a68 h1, h2, h3, h4, h5, h6, p{ color: #414a4d; } styles.css

Slide 72

Slide 72 text

Objetos de Git 0ca1 5bf3 / README.md 30a7 9219 bf37 index.html css 2a68 e5e4 18e4 / css styles.css 421b index.html

Slide 73

Slide 73 text

Objetos de Git 0ca1 5bf3 / README.md 30a7 9219 bf37 index.html css 2a68 e5e4 18e4 / css styles.css 421b index.html

Slide 74

Slide 74 text

E se adicionar um arquivo no root com o mesmo conteúdo do styles.css?

Slide 75

Slide 75 text

Objetos de Git Files Trees Commits

Slide 76

Slide 76 text

Objetos de Git Files Trees Commits Tags

Slide 77

Slide 77 text

No content

Slide 78

Slide 78 text

Objetos de Git 0ca1 5bf3 / README.md 30a7 9219 bf37 index.html css 2a68 e5e4 18e4 / css styles.css 421b index.html mytag

Slide 79

Slide 79 text

Recapitulando

Slide 80

Slide 80 text

Git BLOBS 9219 2a68 421b 30a7

Slide 81

Slide 81 text

Git TREES 5bf3 9219 bf37 2a68 18e4 421b 30a7

Slide 82

Slide 82 text

Git TREES 5bf3 README.md 9219 bf37 index.html css 2a68 18e4 css styles.css 421b index.html 30a7

Slide 83

Slide 83 text

Git COMMITS 0ca1 5bf3 30a7 9219 bf37 css 2a68 e5e4 18e4 421b

Slide 84

Slide 84 text

Git ANNOTATED TAGS 0ca1 5bf3 30a7 9219 bf37 2a68 e5e4 18e4 421b mytag

Slide 85

Slide 85 text

Esses são todos os objetos de Git! Parabéns, agora você já sabe o modelo de Git completo!

Slide 86

Slide 86 text

Essa estrutura lembra alguma coisa?

Slide 87

Slide 87 text

Git é um persistent map

Slide 88

Slide 88 text

Git é um content tracker

Slide 89

Slide 89 text

Git branching

Slide 90

Slide 90 text

Git branching Branch e merge Hitórico HEAD Rebase

Slide 91

Slide 91 text

Git é um content tracker

Slide 92

Slide 92 text

Git é um sistema de controle de versão

Slide 93

Slide 93 text

No content

Slide 94

Slide 94 text

No content

Slide 95

Slide 95 text

Branch master

Slide 96

Slide 96 text

Branch master NOVA BRANCH

Slide 97

Slide 97 text

HEAD é apenas uma referência para uma branch

Slide 98

Slide 98 text

HEAD

Slide 99

Slide 99 text

HEAD NOVO COMMIT

Slide 100

Slide 100 text

HEAD NOVO COMMIT

Slide 101

Slide 101 text

Checkout

Slide 102

Slide 102 text

Checkout NOVA BRANCH

Slide 103

Slide 103 text

Merge

Slide 104

Slide 104 text

Merge

Slide 105

Slide 105 text

Histórico

Slide 106

Slide 106 text

Histórico

Slide 107

Slide 107 text

Histórico

Slide 108

Slide 108 text

Histórico MERGE COMMITS

Slide 109

Slide 109 text

Git workflows

Slide 110

Slide 110 text

“Using Git for source control is now an industry standard, but how do you know which workflow is best?.”

Slide 111

Slide 111 text

“Git itself is fairly complex to understand, making the workflow that you use with it more complex than necessary is simply adding more mental overhead to everybody’s day. I would always advocate using the simplest possible system that will work for your team and doing so until it doesn’t work anymore and then adding complexity only as absolutely needed.” –Scott Chacon, GitHub

Slide 112

Slide 112 text

Git workflow Centralized Workflow Feature Branch Workflow Gitflow Workflow Forking Workflow

Slide 113

Slide 113 text

Time release branches master develop hotfixes feature branches Derivado do artigo de Vincent Driessen: “a successful git branching model" Base da extensão git-flow. Gitflow

Slide 114

Slide 114 text

Gitflow O repositório tem duas branches com vida infinita: master dev master develop Initial production version Next production release Next production release Work in progress

Slide 115

Slide 115 text

Gitflow "Every merge back into master is a new production release."

Slide 116

Slide 116 text

Gitflow SUPPORT BRANCHES Feature branch, release branch e hotfix branch. Permite desenvolvimento paralelo no time. Devem ter um tempo de vida limitado, sou seja, devem ser deletadas. Branches normais de Git. Só mudam na forma de usar.

Slide 117

Slide 117 text

Gitflow FEATURE BRANCHES Existe enquanto a feature está em desenvolvimento. Branch off Merge back Naming dev dev #taskId- description develop feature branches Major feature for next release

Slide 118

Slide 118 text

Gitflow RELEASE BRANCHES Existe para preparar para um release em produção. Depois de feito o release, nada pode ser adicionado a esta branch. Branch off Merge back Naming dev dev master release- [version] release branches master develop Tag 1.0 From this point on, “next release” means the release after 1.0 Bugfixes from rel. branch may be continuously merged back into develop Tag 0.1 Tag 0.2 Only bugfixes! Start of release branch for 1.0

Slide 119

Slide 119 text

master develop hotfixes Tag 1.0 Severe bug fixed for production: hotfix 0.2 Tag 0.1 Tag 0.2 Incorporate bugfix in develop Bug em produção que precisa ser resolvido imediatamente. Não precisa esperar as coisas estarem prontas em dev. Branch off Merge back Naming master dev master #hotfix- description Gitflow HOTFIX BRANCHES

Slide 120

Slide 120 text

1. Gira muito em torno dos “releases”. Para projetos onde há deploy todo dia, pode ser muito custoso. 2. Pode acarretar em long lived branches! 3. Adiciona complexidade Gitflow PROBLEMS

Slide 121

Slide 121 text

“A branching strategy itself is a process; a document. It's the place where, as a team, you capture your approach and attitude to the way that you produce, track and ship code. It can be a simple as a page on the company wiki – something that gives structure to the way that you work”

Slide 122

Slide 122 text

Desfazendo coisas

Slide 123

Slide 123 text

Desfazendo coisas Histórico público git reset git revert git cherry-pick

Slide 124

Slide 124 text

Undoing things Git é tão flexível que existem diferentes formas de desfazer coisas, dependendo do que você já fez e o que você deseja. Antes de começar a fazer qualquer alteração, lembre-se de fazer backup das coisas no seu working directory. Falar sobre a diferença de git reset, 
 git checkout e git revert.

Slide 125

Slide 125 text

Undoing things Principais componentes do repositório:

Slide 126

Slide 126 text

Undoing things Estão no seu working directory mas você ainda não subiu? Undoing things ALTERAÇÕES NÃO COMMITADAS

Slide 127

Slide 127 text

Undoing things Estão no seu working directory mas você ainda não subiu? git reset git checkout -- Undoing things ALTERAÇÕES NÃO COMMITADAS

Slide 128

Slide 128 text

Undoing things Você fez vários commits e quer desfazê-los para sua branch ficar idêntica a “upstream" desta branch? git reset É uma forma de mover o HEAD da branch para um commit diferente. Undoing things ALTERAÇÕES COMMITADAS

Slide 129

Slide 129 text

Undoing things git reset HEAD~2 Move para dois commits atrás. Undoing things ALTERAÇÕES COMMITADAS

Slide 130

Slide 130 text

Undoing things É a melhor coisa que você pode fazer quando você quer desfazer coisas que não compartilhou ainda com o resto do time. (Não deu git push) Undoing things ALTERAÇÕES COMMITADAS

Slide 131

Slide 131 text

Undoing things Undoing things ALTERAÇÕES FORAM DADAS PUSH

Slide 132

Slide 132 text

Undoing things ALTERAÇÕES FORAM DADAS PUSH

Slide 133

Slide 133 text

Undoing things ALTERAÇÕES FORAM DADAS PUSH Desfaz um commit criado um novo commit “negativo”. É uma forma segura de desfazer erros, sem re- escrever o histórico publicado. git revert SHA git revert -m 1 SHA

Slide 134

Slide 134 text

Undoing things ALTERAÇÕES FORAM DADAS PUSH Se for um revert de um merge commit, lembre- se de dar revert do revert no futuro, se você deseja dar merge novamente dessa branch. Faça isso imediatamente depois do revert na sua branch.

Slide 135

Slide 135 text

Undoing things O PROBLEMA DE ALTERAR O HISTÓRICO Se for um revert de um merge commit, lembre- se de dar revert do revert no futuro, se você deseja dar merge novamente dessa branch. Faça isso imediatamente depois do revert na sua branch.

Slide 136

Slide 136 text

Pronto!

Slide 137

Slide 137 text

Resumo Git e controle de versão Instalar e configurar Criar repositórios e o básico para começar a trabalhar Entendendo o modelo de git Fluxos de trabalho Resolver tretas!

Slide 138

Slide 138 text

No content

Slide 139

Slide 139 text

github.com/debscorreia github.com/renatoliveira www.labcodes.com.br speakerdeck.com/labcodes Obrigado!