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

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

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

Apresentação utilizada no workshop sobre git realizada na 2014-Senec USP/Politécnica - 1ª Semana de Eng. Elétrica e Computação no dia 24/09.

Diego Martins de Pinho

September 24, 2014
Tweet

More Decks by Diego Martins de Pinho

Other Decks in Technology

Transcript

  1. Cronograma  Apresentação  Quais os problemas?  O que?

    Pra que? Como e porque?  Conheça o Git  Como instalar  Primeiros passos  Utilizando o GitHub  Integrando o Git e o GitHub  Demonstração  Dicas adicionais  Links  Dúvidas
  2. Apresentação – Diego M. de Pinho Diego Martins de Pinho

     22 anos  Bacharel em ciência da computação pela PUC-SP  Desenvolvedor na Touch por 2 anos  Gosta de ler, estudar, escrever, jogar videogames, ensinar e desenvolver /diego.pinho.31 @DiegoPinho /in/diegopinho diegopinho.com.br
  3. 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 GTPW  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
  4. Apresentação – Touch Health  A Touch Health usa tecnologia

    de ponta para fornecer aos seus clientes os melhores produtos.
  5. Quais os problemas?  Dois dos principais problemas no desenvolvimento

    de software em equipe são:  Como manter o histórico do nosso código ao decorrer do tempo de maneira limpa e desacoplada?  Como trabalhar em equipe?  Também é necessário lidar com:  Prazos  Mutabilidade de requisitos  Finanças  Ambiente de trabalho  Processos  Etc...
  6. Histórico de modificações Como manter o histórico do nosso código

    ao decorrer o tempo de maneira limpa e desacoplada? 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! Eu deletei ontem. Já era.
  7. Problemas com desenvolvimento em equipe 1 - Detectar as mudanças

    providas pelos nossos colegas Foi você que alterou a minha classe? Eu?! Não, claro que não... 2 - Identificar conflitos entre alterações Acabei de refatorar todas as classes de contabilidade! Acabei de inserir 32 classes lá Eu te odeio, sabia?
  8. Problemas com desenvolvimento em equipe 3 - Integrar de maneira

    transparente e sem emendas com o código de todos os outros desenvolvedores da nossa equipe Tragam seus códigos que com um pouco de fita, eu junto tudo! 4 - Trabalhar de forma assíncrona (não ter que ficar esperando as mudanças dos colegas para começar a trabalhar). Por favor, aguardem na fila que ele não terminou ainda
  9. 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 • Código-fonte • Documentação • Sites • Apresentações • Composições • Etc...
  10. 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/
  11. Um pouco sobre o Git  Git foi desenvolvido por

    Linus Torvalds em meados de 2005 para o desenvolvimento do kernel do Linux  O Git 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  Conhecer bem como utilizar o Git é um habilidade importante para uma carreira bem-sucedida no desenvolvimento de software
  12. Principais características do Git  Projeto open source  Suporte

    consistente para desenvolvimentos não-lineares  Desenvolvimento distribuído  Compatibilidade com protocolos/sistemas existentes  Manipulação eficiente de projetos extensos  Autenticação criptográfica do histórico  Modelo baseado em ferramentas  Estratégias de mescla (merge) conectáveis
  13. Vantagens do Git  Desenvolvimento distribuído Clientes recuperam apenas a

    versão de interesse (snapshot) Clientes guardam uma cópia completa do repositório (histórico) Histórico de arquivos no servidor
  14. Vantagens do Git  O Git possui integridade Checksum identifica

    todos os dados dentro do Git Secure Hash Algorithm
  15. Vantagens do Git  Git é rápido Operation Scenario GIT

    SVN Commit Files (A) Add, commit and push 113 modified files (2164+, 2259-) 0.64 2.60 4x Commit Images (B) Add, commit and push 1000 1k images 1.53 24.70 16x Diff Current Diff 187 changed files (1664+, 4859-) against last commit 0.25 1.09 4x Diff Recent Diff against 4 commits back (269 changed/3609+,6898-) 0.25 3.99 16x Diff Tags Diff two tags against each other (v1.9.1.0/v1.9.3.0 ) 1.17 83.57 71x Log (File) Log of the history of a single file (array.c - 483 revs) 0.60 82.84 138x Update Pull of Commit A scenario (113 files changed, 2164+, 2259-) 0.90 2.82 3x Blame Line annotation of a single file (array.c) 1.91 3.04 1x Fonte: http://git-scm.com/about/small-and-fast
  16. Vantagens do Git Versão específica do projeto, visível no sistema

    de arquivos Repositório completo do projeto, oculto no sistema de arquivos Arquivos salvos em commit Arquivos novos ou modificados Arquivos selecionados para o commit
  17. Como instalar  Passos:  Acessar: http://msysgit.github.io/  A instalação

    não tem nenhum segredo. Escolha as opções padrão.  Serão instalados alguns programas, sendo o mais importante o Git Bash, que permite que o Git seja executado pela linha de comando no Windows. Windows
  18. Como instalar  Passos (maneira 1):  Acessar: http://sourceforge.net/projects/git-osx-installer/ 

    A instalação não tem nenhum segredo. Escolha as opções padrão.  Passos (maneira 2):  É possível instalar via MacPorts (http://www.macports.org).  Execute o comando: $ sudo port install git-core +svn +doc +bash_completion +gitweb Macintosh
  19. Como instalar  Passos (distribuição Debian):  Abra o terminal

    e execute: $ sudo apt-get install git  Passos (outras distribuições):  Confira o comando para demais distribuições em: http://git- scm.com/download/linux Linux
  20. Ciclo básico de trabalho  Os principais comandos do GIT

    estão ligados ao seu ciclo básico de trabalho. Ele pode ser definido como as operações comuns realizadas por um desenvolvedor em seu dia a dia de trabalho. Fazem parte do ciclo básico do GIT as seguintes operações:  Atualizar seu repositório e cópia de trabalho  Fazer alterações  Verificar suas alterações  Possivelmente desfazer algumas alterações  Resolver conflitos  Submeter alterações  Propagar suas alterações para outro repositório
  21. 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?
  22. 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
  23. 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
  24. 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!
  25. 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:
  26. 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:
  27. 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
  28. 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
  29. 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 <[email protected]> Date: Wed Jun 5 15:15:15 2014 Segundo commit Commit 48203j4c0234j2cj0423c3j293402c394cn3 Autor: Diego Martins de Pinho <[email protected]> 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
  30. 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 <[email protected]> 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 <[email protected]> Date: Wed Jun 5 16:16:16 2014 Primeiro commit Alterando o último commit
  31. Removendo arquivos do stage  Para remover o arquivo do

    stage, utilizamos o comando git reset HEAD. $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: arquivo_um.txt # $ git reset HEAD arquivo_um.txt Unstaged changes after reset: M arquivo_um.txt $ 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 Removendo o arquivo do stage
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. Configurando conta no GitHub  Vá até a categoria SSH

    Keys e adicione sua chave SSH. Caso você não possua ou não saiba gerar, a própria página possui um tutorial: https://help.github.com/articles/generating-ssh-keys
  38. Criando um repositório no GitHub  Na tela principal, clique

    em + New respository e crie um repositório público (plano gratuito não sobre repositórios privados)
  39. Criando um repositório no GitHub Dados sobre o repositório Informações

    sobre o repositório Dados sobre commits e branches Dados para clonar o repositório
  40. Clonando um repositório no GitHub  Para clonar um repositório,

    usamos 2 protocolos: HTTP e SSH. No caso do Linux, fica mais fácil utilizar o protocolo SSH, mas para o Windows, talvez o HTTP seja mais fácil $ git clone [email protected]:workshop- git/repositorio-teste.git Por HTTP será necessário inserir seu login e sua senha do GitHub! Para maiores informações: https://help.github.com/articles/which-remote-url-should-i-use
  41. 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
  42. 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
  43. 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
  44. Demonstração TAREFAS  Configurar o git  Criar um repositório

    local  Adicionar um arquivo  Modificar um arquivo  Comitar no repositório local  Verificar mudanças  Criar um repositório remoto  Comitar no repositório remoto OBJETIVOS  Demonstrar o uso básico do Git e do GitHub (apresentar o uso dos comandos apresentados ao longo do workshop) https://try.github.io/ Try Git
  45. 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
  46. 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
  47. Resolução de conflito com Meld  A resolução de conflitos

    no Git não é uma tarefa fácil de se resolver  Melhor opção: Meld  Comparação de arquivos  Comparação de diretórios  Controle de versão  Modo merge  Suporte internacional Como instalar Definindo o Meld como ferramenta de merge do Git $ git config --global merge.tool meld $ sudo apt-get install meld Para maiores informações: http://meldmerge.org/
  48. 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/