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. View Slide

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

    View Slide

  3. 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 Slide

  4. View Slide

  5. 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 Slide

  6. 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 Slide

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

    View Slide

  8. Vamos falar sobre
    desenvolvimento de
    software...

    View Slide

  9. 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 Slide

  10. 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 Slide

  11. 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 Slide

  12. 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 Slide

  13. 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 Slide

  14. 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 Slide

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

    View Slide

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

    View Slide

  17. 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 Slide

  18. 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 Slide

  19. 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 Slide

  20. 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 Slide

  21. Como Instalar

    View Slide

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

    View Slide

  23. Primeiros Passos

    View Slide

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

    View Slide

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

    View Slide

  26. 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 Slide

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

    View Slide

  28. 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 Slide

  29. 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 Slide

  30. Ciclo de vida dos arquivos no repositório

    View Slide

  31. 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 Slide

  32. 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 Slide

  33. 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 Slide

  34. 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 Slide

  35. 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 Slide

  36. 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 Slide

  37. 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 Slide

  38. 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 Slide

  39. 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 Slide

  40. 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 Slide

  41. 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 Slide

  42. 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 Slide

  43. Integrando o
    Git
    com o GitHub

    View Slide

  44. 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 Slide

  45. 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 Slide

  46. 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 Slide

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

    View Slide

  48. Dicas úteis

    View Slide

  49. 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 Slide

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

    View Slide

  51. 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 Slide

  52. Links úteis

    View Slide

  53. 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 Slide

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

    View Slide

  55. Vídeo

    View Slide

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

    View Slide

  57. View Slide