Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Workshop - Introdução ao controle de versão com GIT

Workshop - Introdução ao controle de versão com GIT

Apresentação utilizada no workshop sobre git realizada no Encontro de ciências exatas e tecnologia, na Pontifícia Universidade Católica, no dia 14/10/2014.

Diego Martins de Pinho

October 14, 2014
Tweet

More Decks by Diego Martins de Pinho

Other Decks in Programming

Transcript

  1. Introdução ao controle de versão
    com GIT
    Diego Martins de Pinho
    [email protected]

    View full-size slide

  2. Cronograma
    ▪ Apresentação
    ▪ Quais os problemas?
    ▪ Conheça o Git
    ▪ Como instalar
    ▪ Comandos básicos
    ▪ Utilizando o GitHub
    ▪ Integrando o Git e o GitHub
    ▪ Dicas adicionais
    ▪ Links
    ▪ Dúvidas
    ▪ Palavra dos patrocinadores
    ▪ Sorteio do livro

    View full-size slide

  3. Apresentação
    Diego Martins de Pinho
    ▪ 22 anos
    ▪ Bacharel em ciência da
    computação pela PUC-SP
    ▪ Desenvolvedor na Touch por 2 anos
    ▪ Ex-blogueiro: FuckYeaWorld.com
    ▪ Gosta de ler, escrever, jogar videogames,
    ensinar e desenvolver
    /diego.pinho.31 @DiegoPinho /in/diegopinho diegopinho.com.br
    DiegoPinho DiegoPinho DiegoPinho1992

    View full-size slide

  4. Apresentação – Touch Health
    ▪ 15+ anos de experiência em
    desenvolvimento de software para área
    da saúde
    ▪ Desde automação laboratorial até
    gestão de laudos de exame de
    imagem
    ▪ 5º ano premiado na GPTW
    ▪ Atua em grandes hospitais/laboratórios:
    DASA, Hospital Samaritano, Salomão
    Zoppi Diagnósticos, entre outros.
    /touchhealth /company/280363 touchhealth.com.br
    São Paulo – Vila Olímpia
    São José dos Campos – Univap

    View full-size slide

  5. Apresentação – Touch Health
    ▪ A Touch Health usa tecnologia de ponta para fornecer aos seus
    clientes os melhores produtos.

    View full-size slide

  6. Vamos falar sobre
    desenvolvimento de
    software...

    View full-size slide

  7. Quais os problemas em desenvolvimento?
    Prazos
    Mutabilidade de Requisitos
    Finanças
    Ambiente de Desenvolvimento
    Ambiente de Trabalho
    Trabalho em
    equipe
    Complexidade
    Mudanças constantes
    Processos
    Abstrato
    Tecnologias

    View full-size slide

  8. Histórico de modificações
    Garoto, rápido,
    não há tempo!
    Eu sou você daqui 20 anos. No futuro, o
    sistema vai quebrar em produção e só o seu
    código de hoje pode salvá-lo! Cadê ele?!
    Vish! Eu deletei
    ontem. Já era.

    View full-size slide

  9. Problemas com desenvolvimento em equipe
    Detectar as mudanças providas pelos nossos colegas
    Foi você que alterou
    a minha classe? Eu?! Não, claro
    que não...

    View full-size slide

  10. Problemas com desenvolvimento em equipe
    Acabei de
    refatorar todas
    as classes de
    contabilidade!
    Sério? Vish...
    Acabei de
    inserir 32
    classes lá
    Eu te odeio,
    sabia?
    Detectar conflitos entre alterações

    View full-size slide

  11. Problemas com desenvolvimento em equipe
    Integrar de maneira transparente e sem emendas com o
    código de todos os outros desenvolvedores da equipe
    Tragam seus
    códigos que com
    um pouco de fita,
    eu junto tudo!

    View full-size slide

  12. Problemas com desenvolvimento em equipe
    Por favor,
    aguardem na fila
    que ele não
    terminou ainda
    Trabalhar de forma assíncrona (não ter que ficar
    esperando as mudanças dos colegas para trabalhar)

    View full-size slide

  13. Como lidar com todos estes
    problemas?! Existe uma
    ferramenta para nos auxiliar?

    View full-size slide

  14. SIM! Elas são chamadas de
    ferramentas de controle de
    versão!

    View full-size slide

  15. O que é controle de versão?
    ▪ Salva alterações em arquivos ao longo do tempo
    ▪ Útil para recuperar versões específicas do passado
    ▪ Desenvolvimento de software em equipe
    ▪ Útil não somente para código-fonte de programas
    Desenvolvedores Designers
    Documentação
    Versões
    • Código-fonte
    • Documentação
    • Sites
    • Apresentações
    • Composições
    • TCC
    • Etc...

    View full-size slide

  16. Conheça o Git
    ▪ O Git é um sistema de controle de versão que, pela sua estrutura
    interna, é uma máquina do tempo extremamente rápida e um robô
    de integração bem competente.
    Site oficial:
    http://git-scm.com/

    View full-size slide

  17. Um pouco sobre o Git
    Foi Desenvolvido por Linus
    Torvalds para o
    desenvolvimento do kernel
    do Linux!
    Não é somente usado em
    empresas, mas também para
    hospedar projetos open
    source, como: jQuery, Node.
    js, Ruby on Rails, Jenkins,
    Spring, JUnit, entre outros
    Conhece-lo é uma
    habilidade importante para
    uma carreira bem sucedida
    em desenvolvimento de
    software!

    View full-size slide

  18. Principais características do Git
    Open
    Source
    Desenvolvimento
    distribuído
    Compatibilidade
    com HTTP/SSH
    Autenticação
    criptográfica
    do histórico
    Maior parte
    das ações
    são locais
    Rapidez
    Visão dos
    arquivos
    diferenciada
    E muito
    mais...

    View full-size slide

  19. Como Instalar

    View full-size slide

  20. Como Instalar
    http://msysgit.github.io/
    http://sourceforge.net/projects/git-osx-installer/
    $ sudo apt-get install git

    View full-size slide

  21. Primeiros Passos

    View full-size slide

  22. Imagine que você acabou de
    entrar em uma empresa de
    desenvolvimento...

    View full-size slide

  23. Cenário padrão de trabalho
    Desenvolvedor 4
    Desenvolvedor 2 Desenvolvedor 3
    Repositório
    Master
    Desenvolvedor 1

    View full-size slide

  24. Ciclo básico de trabalho
    ATUALIZAR O
    REPOSITÓRIO
    RESOLVER
    CONFLITOS
    CLONAR
    PROJETO
    REALIZAR
    ALTERAÇÕES
    VERIFICAR
    ALTERAÇÕES
    DESFAZER
    ALTERAÇÕES
    GRAVAR
    ALTERAÇÕES
    PROPAGAR
    ALTERAÇÕES
    Já clonou o
    repositório?
    não
    sim
    Ocorreram
    conflitos?
    sim
    não sim
    não
    Desfazer
    alterações?

    View full-size slide

  25. Parece que o Git pode ajudar
    neste ciclo de desenvolvimento...
    Como faço para usa-lo?

    View full-size slide

  26. Primeira configuração
    ▪ O primeiro passo é nos identificarmos para o Git através do nosso
    nome e e-mail. Para isso, basta entrar no terminal e executar os
    comandos:
    $ git config --global user.name “Diego Martins de Pinho”
    Nome:
    $ git config --global user.email “[email protected]
    E-Mail:
    /etc/gitconfig ~/.gitconfig
    Configurações Globais Configurações do Usuário
    .git/config
    Configurações de um
    Repositório
    --system --global

    View full-size slide

  27. Criando um repositório
    ▪ Para transformar um diretório em um repositório reconhecido pelo
    Git, basta executar o comando git init
    ▪ Uma vez executado este comando, o diretório já um repositório Git
    ▪ Todo repositório Git possui um diretório oculto com o nome .git
    $ git init
    Criando um repositório:
    Arquivos do
    projeto
    git init
    Arquivos do
    Projeto
    +
    .git
    Arquivos de
    configuração
    e rastreio do
    Git
    Diretório do
    projeto
    Diretório do
    projeto

    View full-size slide

  28. Ciclo de vida dos arquivos no repositório

    View full-size slide

  29. Verificando nossos arquivos
    ▪ Para sabermos se um arquivo dentro do nosso diretório já foi
    versionado, utilizamos o comando git status
    ▪ Ao executar este comando, será exibida uma mensagem
    semelhante a esta:
    # On branch master
    #
    # Initial commit
    #
    # Untracked files:
    # (use "git add ..." to include in what will be
    committed)
    #
    # arquivo_teste.txt
    nothing added to commit but untracked files present (use
    "git add" to track)
    Verificando arquivos:
    Note que o arquivo
    não está sendo
    rastreado pelo Git!

    View full-size slide

  30. Rastreando e gravando as alterações
    ▪ Para rastrearmos uma alteração em um arquivo, utilizamos o
    comando git add
    ▪ Por exemplo, para que o arquivo_teste.txt seja rastreado, utilizamos
    o comando: git add arquivo_teste.txt
    $ git add arquivo_teste.txt
    $ git status
    # On branch master
    #
    # Initial commit
    #
    # Changes to be commited:
    # (use “git rm –cached ...” to unstage)
    #
    # new file: arquivo_teste.txt
    Com este comando,
    adicionamos o arquivo
    novo/modificado ao
    stage
    Rastreando arquivos:

    View full-size slide

  31. Rastreando e gravando alterações
    ▪ Para rastrear vários arquivos de uma vez, utilizamos o comando git
    add .
    ▪ Para o exemplo abaixo, imagine que temos 3 arquivos no nosso
    workspace: arquivo_um.txt, arquivo_dois.txt e arquivo_tres.txt
    $ git add .
    $ git status
    # On branch master
    #
    # Initial commit
    #
    # Changes to be commited:
    # (use “git rm –cached ...” to unstage)
    #
    # new file: arquivo_um.txt
    # new file: arquivo_dois.txt
    # new file: arquivo_tres.txt
    Com este comando,
    adicionamos os
    arquivos
    novos/modificados ao
    stage
    Rastreando arquivos:

    View full-size slide

  32. Rastreando e gravando alterações
    ▪ Às vezes temos arquivo no nosso projeto que são sempre
    modificados, como por exemplo, uma lista de tarefas. Para estes
    casos, nunca iremos querer comitar estes arquivos.
    ▪ Para resolver este problema, basta adicionar um arquivo chamado .
    gitignore no diretório do seu projeto e colocar o nome do arquivo
    nele.
    Rastreando arquivos:
    # On branch master
    #
    # Initial commit
    #
    # Untracked files:
    # (use "git add ..." to include in what will be
    committed)
    #
    # .gitignore
    nothing added to commit but untracked files present (use
    "git add" to track
    .gitignore
    Depois que comitado o
    .gitignore, o Git vai
    sempre ignorar as
    modificações no
    arquivo_ignorado.txt
    arquivo_
    ignorado.txt
    Diretório do
    projeto

    View full-size slide

  33. Gravando arquivo no repositório
    ▪ Para gravamos as mudanças no nosso repositório, utilizamos o
    comando git commit
    ▪ Caso seja o primeiro commit, também utilizamos a opção –m para
    informar a mensagem do commit
    $ git commit –m ‘Mensagem do meu commit’
    [master (root-commit) d0123st3] Mensagem do
    meu commit
    0 files changed
    create mode 100644 arquivo_teste.txt
    $ git status
    # On branch master
    nothing to commit (working directory clean)
    Gravando arquivos:
    Se executarmos o git status
    após o commit, veremos que
    Não há mais nada para
    comitar, ou seja, já foi tudo
    gravado

    View full-size slide

  34. Histórico de modificações
    ▪ Para visualizar o histórico de commits do repositório, utilizamos o
    comando git log
    $ git log
    Commit 312j3092cb03u23901283nc901823bcnbb
    Autor: Diego Martins de Pinho
    Date: Wed Jun 5 15:15:15 2014
    Segundo commit
    Commit 48203j4c0234j2cj0423c3j293402c394cn3
    Autor: Diego Martins de Pinho
    Date: Wed Jun 4 14:14:14 2014
    Primeiro commit
    Visualizando histórico de mudanças
    Hash do commit,
    nome do autor,
    data do commit e
    mensagem do
    commit

    View full-size slide

  35. Alterando o último commit
    ▪ É possível alterar o último commit utilizando o comando git commit –-
    amend. Ele irá refazer o último commit considerando o stage atual
    $ git log
    Commit 312j3092cb03u23901283nc901823bcnbb
    Autor: Diego Martins de Pinho
    Date: Wed Jun 5 15:15:15 2014
    Primeiro commit
    $ git add arquivo_modificado.txt
    $ git commit –amend
    Commit 312j3092cb03u23901283nc901823bcnbb
    Autor: Diego Martins de Pinho
    Date: Wed Jun 5 16:16:16 2014
    Primeiro commit
    Alterando o último commit

    View full-size slide

  36. Desfazendo modificação de um arquivo
    ▪ Para desfazer as modificações em um arquivo, utilizamos o
    comando git checkout.
    $ git status
    # On branch master
    # Changes not staged for commit:
    # (use "git add ..." to update what will be committed)
    # (use "git checkout -- ..." to discard changes in working directory)
    #
    # modified: arquivo_um.txt
    #
    no changes added to commit (use "git add" and/or "git commit -a")
    $ git checkout -- arquivo1
    $ git status
    # On branch master
    nothing to commit, working directory clean
    Desfazendo modificação em um arquivo

    View full-size slide

  37. Ciclo básico de trabalho
    git fetch,
    git pull
    git mergetool
    git clone
    git add,
    git rm,
    git mv
    git diff,
    git status
    git revert
    git commit
    git push
    Já clonou o
    repositório?
    não
    sim
    Ocorreram
    conflitos?
    sim
    não sim
    não
    Desfazer
    alterações?
    VERIFICAR
    ALTERAÇÕES
    ATUALIZAR O
    REPOSITÓRIO
    RESOLVER
    CONFLITOS
    REALIZAR
    ALTERAÇÕES
    DESFAZER
    ALTERAÇÕES
    GRAVAR
    ALTERAÇÕES
    PROPAGAR
    ALTERAÇÕES

    View full-size slide

  38. Utilizando o GitHub
    nyan nyan nyan nyan nyan
    nyan nyan nyan nyan nyan
    nyan nyan nyan nyan nyan
    nyan nyan nyan nyan nyan
    nyan nyan nyan nyan nyan
    nyan nyan nyan nyan nyan

    View full-size slide

  39. O que é o GitHub?
    ▪ GitHub é um serviço web para projetos que usam o controle de
    versionamento Git
    ▪ Escrito em Ruby on Rails
    ▪ Desenvolvida pela Logical Awesome
    ▪ Possui planos comerciais e gratuitos para projetos de código aberto
    ▪ Possui funcionalidades de uma rede social como feeds, followers,
    wiki e um gráfico que mostra como os desenvolvedores trabalham
    as versões de seus repositórios
    ▪ Utilizado para hospedar projetos como: jQuery, Prototype, ASP.
    NET, MooTools, Haml, entre outros

    View full-size slide

  40. Hospedagem de código
    Controle de
    Versão
    Git
    Git
    Mercurial
    Git
    Subversion
    Perforce
    Preço do
    Repositório
    Público
    Grátis Grátis Grátis
    Preço do
    Respositório
    Privado
    US$ 7 por mês
    (até 5 usuários)
    Grátis
    (até 5 usuários)
    Grátis
    (até 3 usuários)
    Ferramentas
    Controle de equipe
    Issue tracking
    Revisão de código
    Wikis
    Controle de equipe
    Issue tracking
    Revisão de código
    Wikis
    Controle de equipe
    Issue tracking
    Revisão de código
    Wikis
    bitbucket.org
    github.com assembla.com

    View full-size slide

  41. Integrando o
    Git
    com o GitHub

    View full-size slide

  42. Enviando commits para repositório remoto
    ▪ Para propagar os commits para um repositório remoto, é necessário
    adicioná-lo ao seu repositório local. Para isso utilizamos o comando
    git remote add origin
    $ git remote add origin [email protected]:DiegoPinho/workshop.git
    Adicionando repositório remoto

    View full-size slide

  43. Enviando commits para repositório remoto
    ▪ Uma vez que o repositório externo está configurado, podemos
    propagar nossas mudanças locais para o repositório local utilizando
    o comando git push.
    $ git push origin master
    Counting objects: 5, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (4/4), done.
    Writing objects: 100% (5/5), 491 bytes, done.
    Total 5 (delta 1), reused 0 (delta 0)
    To [email protected]:DiegoPinho/workshop.git
    * [new branch] master -> master
    Enviando commits para repositório remoto
    Repositório
    local
    Repositório
    remoto (github)
    Uma vez no repositório
    remoto, estará
    disponível para todos!
    Enviando
    modificações para o
    origem na branch
    master

    View full-size slide

  44. Obtendo commits do repositório remoto
    ▪ Para verificarmos atualizações do repositório remoto, utilizamos o
    comando git fetch origin
    ▪ Uma vez que atualizações são identificadas, a incorporamos ao
    nosso repositório local com o comando git pull
    $ git fetch origin
    remote: Counting objects: 159, done.
    remote: Compressing objects: 100% (82/82), done.
    remote: Total 83 (delta 48), reused 0 (delta 0)
    Unpacking objects: 100% (83/83), done.
    From [email protected]:DiegoPinho/workshop.git
    431ece6..f4c1242 master -> origin/master
    $ git pull
    Updating 431ece6..f4c1242
    Fast-forward
    arquivo_um.txt | 6 ++
    Obtendo commits do repositório remoto
    São mostradas todas
    as alterações feitas
    nos arquivos do ponto
    que você estava até o
    ponto obtido

    View full-size slide

  45. O Git realmente é muito bom...
    mas... Não tem como deixar
    mais fácil?

    View full-size slide

  46. Dicas úteis

    View full-size slide

  47. Customizando comandos com alias
    ▪ Muitas vezes os comandos do Git são muito verbosos, como por
    exemplo: git rebase master, git fetch origin/master, etc...
    ▪ O Git oferece a possibilidade de customizar comandos através de
    alias. Para configurá-los, basta editar o arquivo .gitconfig
    .gitconfig
    $ git st
    # On branch master
    # Changes not staged for commit:
    # (use "git add ..." to update what will be committed)
    # (use "git checkout -- ..." to discard changes in working directory)
    #
    # modified: arquivo_um.txt
    #
    no changes added to commit (use "git add" and/or "git commit -a")
    [alias]
    st = status
    ls = log --decorate=short --oneline
    co = checkout

    View full-size slide

  48. Ferramentas gráficas
    Smart-git (http://www.syntevo.
    com/smartgit/)
    Gitk
    (http://gitk.sourceforge.net/)
    Git-cola (http://git-cola.github.io/)

    View full-size slide

  49. Plugin do Git para Eclipse
    ▪ Também existem alguns plugins para o Eclipse para facilitar o uso
    do Git no seu projeto. O mais famoso deles é o EGit - http://eclipse.
    github.io/
    Ver as alterações não
    confirmadas e facilmente
    comparar , confirmar ou
    desfazer deles.
    Veja por que , quando e
    por quem cada linha de
    um arquivo foi
    modificado pela última
    vez.
    Visualize commits ao
    longo do tempo e ver
    rapidamente quais ramos
    foram fundidas.
    Comitar mudanças Rastrear mudanças Navegar histórico

    View full-size slide

  50. Links úteis

    View full-size slide

  51. Links úteis
    ▪ Documentação do Git: http://git-scm.com/doc
    ▪ Help do GitHub: https://help.github.com/
    ▪ Try-Git: https://try.github.io
    ▪ Git CheatSheet: http://ndpsoftware.com/git-cheatsheet.html
    ▪ Git tutorials: https://www.atlassian.com/git/tutorials/
    ▪ Top 10 Git Tutorials for Beginners: http://goo.gl/dikwH8
    ▪ E para não levar tudo tão a sério...
    ▪ When in Git: http://wheningit.tumblr.com/

    View full-size slide

  52. O que acontece quando a
    equipe não sabe usar
    o Git direito...

    View full-size slide

  53. Dúvidas?
    Diego Martins de Pinho
    [email protected]
    Touch Health
    [email protected]
    Muito
    Obrigado!

    View full-size slide