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.

9ce1dc6b940b4ab85ecb2f1eacfbe7c1?s=128

Diego Martins de Pinho

October 14, 2014
Tweet

Transcript

  1. None
  2. Introdução ao controle de versão com GIT Diego Martins de

    Pinho diego.martins@touchhealth.com.br
  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
  4. None
  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
  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
  7. Apresentação – Touch Health ▪ A Touch Health usa tecnologia

    de ponta para fornecer aos seus clientes os melhores produtos.
  8. Vamos falar sobre desenvolvimento de software...

  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
  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.
  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...
  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
  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!
  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)
  15. Como lidar com todos estes problemas?! Existe uma ferramenta para

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

  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...
  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/
  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!
  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...
  21. Como Instalar

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

  23. Primeiros Passos

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

    desenvolvimento...
  25. Cenário padrão de trabalho Desenvolvedor 4 Desenvolvedor 2 Desenvolvedor 3

    Repositório Master Desenvolvedor 1
  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?
  27. Parece que o Git pode ajudar neste ciclo de desenvolvimento...

    Como faço para usa-lo?
  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 “diego.martins@touchhealth.com” E-Mail: /etc/gitconfig ~/.gitconfig Configurações Globais Configurações do Usuário .git/config Configurações de um Repositório --system --global
  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
  30. Ciclo de vida dos arquivos no repositório

  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 <file>..." 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!
  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 <file>...” to unstage) # # new file: arquivo_teste.txt Com este comando, adicionamos o arquivo novo/modificado ao stage Rastreando arquivos:
  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 <file>...” 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:
  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 <file>..." 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
  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
  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 <diego.martins@touchhealth.com> Date: Wed Jun 5 15:15:15 2014 Segundo commit Commit 48203j4c0234j2cj0423c3j293402c394cn3 Autor: Diego Martins de Pinho <diego.martins@touchhealth.com> 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
  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 <diego.martins@touchhealth.com> 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 <diego.martins@touchhealth.com> Date: Wed Jun 5 16:16:16 2014 Primeiro commit Alterando o último commit
  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 <file>..." to update what will be committed) # (use "git checkout -- <file>..." 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
  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
  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
  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
  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
  43. Integrando o Git com o GitHub

  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 git@github.com:DiegoPinho/workshop.git Adicionando repositório remoto
  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 git@github.com: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
  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 git@github.com: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
  47. O Git realmente é muito bom... mas... Não tem como

    deixar mais fácil?
  48. Dicas úteis

  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 <file>..." to update what will be committed) # (use "git checkout -- <file>..." 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
  50. Ferramentas gráficas Smart-git (http://www.syntevo. com/smartgit/) Gitk (http://gitk.sourceforge.net/) Git-cola (http://git-cola.github.io/)

  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
  52. Links úteis

  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/
  54. O que acontece quando a equipe não sabe usar o

    Git direito...
  55. Vídeo

  56. Dúvidas? Diego Martins de Pinho diego.martins@touchhealth.com.br Touch Health recrutamento@touchhealth.com.br Muito

    Obrigado!
  57. None