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

O Fantástico Mundo de GIT

O Fantástico Mundo de GIT

Talk educacional para novos desenvolvedores ministrada na Superlógica

07080351150c53efa399856330e4fa19?s=128

Matheus Fidelis

December 22, 2017
Tweet

Transcript

  1. O FANTÁSTICO MUNDO DE GIT

  2. $ whoami Matheus Fidelis Desenvolvedor Web PHP na Superlogica Tecnologias

    DevOps & Security SysAdmin /fidelissauro /msfidelis $ WHOAMI
  3. • GIT não é um sistema de controle de versão

    de código • GIT é um sistema de controle de versão de ARQUIVOS • Permite que pessoas possam contribuir para projetos de forma simultânea, editando, criando e removendo sem riscos de sobrescrita. • GIT não se resume apenas a código e usar um sistema de versionamento é uma decisão sábia não só para Devs. • Versiona arquivos PST, Imagens, Documentos, Binários e até mesmo… folhas de código :) # git log O QUE É GIT
  4. None
  5. ▸ Criado por Linus Torvalds para substituir um VCS (Version

    Control System) chamado Bit Keeper - Todos os arquivos são requisitados ao servidor ▸ Criado a partir da necessidade de gerenciar o projeto do Kernel Linux com a comunidade. ▸ Focado em performance e confiabilidade ▸ Mais tarde se tornou um DVCS (Distributed Version Control Systems) - Todo cliente possui uma cópia completa do repositório. O QUE É GIT
  6. ~$ whoami

  7. ▸ GIT é apenas um serviço, em um servidor que

    manipula as informações e versões do repositórios. ▸ O Github é uma hospedagem de Git. Ele fornece ferramentas para melhorar a usabilidade em um servidor de Git compartilhado com opções gratuitas e privadas. O GIT NÃO É O GITHUB
  8. INCLUSIVE EXISTEM OUTRAS OPÇÕES….

  9. git pull git push git commit git add git checkout

    ALIASES DO GIT Plumbing and Porcelain
  10. git pull git push git commit git add git checkout

    ALIASES DO GIT Plumbing and Porcelain git rebase git reset git merge git fetch
  11. ALIASES DO GIT Plumbing and Porcelain git pull git push

    git commit git add git checkout git rebase git reset git merge git fetch cat-file write-tree read-tree commit-tree hash-object
  12. GIT OBJECTS • BLOBS • TREES • COMMITS

  13. None
  14. OS OBJETOS DO GIT - BLOBS ▸ O Git usa

    um modelo de armazenamento uniforme para todos os seus objetos. ▸ Cada objeto é identificado com o seu hash, mas o tipo do objeto é armazenado em metadados juntamente com o objeto. ▸ Sempre que criamos ou modificamos um arquivo trackeado, é gerado um BLOB para o mesmo.
  15. None
  16. None
  17. OS OBJETOS DO GIT - TREES ▸ Como o GIT

    sabe, qual arquivo está na minha branch atual, e qual pertence a qual? ▸ Os blobs são organizados em trees, o que corresponde aos diretórios em uma estrutura de diretórios. ▸ A tree representa uma arvore de diretório diretório, contendo uma mistura de blobs e outras trees. Caso seja um blob de tree dentro de uma tree, podemos identificar um subdiretório, e assim em diante...
  18. OS OBJETOS DO GIT - COMMITS ▸ Um commit também

    é um objeto de hash, armazenado exatamente nos mesmos mecanismos em que blobs e trees. ▸ Um commit é um hash da mensagem de commit, com um tipo de identificação das modificações.
  19. None
  20. None
  21. None
  22. USANDO O GIT SEM FERRAMENTAS #SEJAROOTS

  23. USANDO O GIT NO GITHUB COM AUTENTICAÇÃO DE DUAS ETAPAS

    ▸ Copie sua chave pública. ▸ No Github vá em Settings -> SSH and GPG keys ▸ Clique em New SSH Key e cole sua chave. ▸ Pronto :)
  24. USANDO O GIT NO GITHUB COM AUTENTICAÇÃO DE DUAS ETAPAS

    ▸ cat ~/.ssh/id_rsa.pub
  25. USANDO O GIT NO GITHUB COM AUTENTICAÇÃO DE DUAS ETAPAS

  26. INSTALAR O GIT É FÁCIL ~# sudo apt-get install git

  27. CONFIGURANDO O GIT $ git config --global user.name “SEU NOME”

    $ git config --global user.email “SEU EMAIL” $ git config --global core.fileMode false $ git config --global diff.tool vimdiff
  28. ▸ O repositório é onde o sistema de controle de

    versão mantém o rastreamento de todas as alterações realizadas no projeto. ▸ Armazenam o estado atual do código, o histórico de alterações, quem fez, e um log que explica o porquê da alteração ter sido realizada. ▸ De forma geral o repositório precisa ter tudo que é essencial para o projeto, tanto para codificar, modificar quanto para construir as versões. REPOSITORIO
  29. ▸ WORKING DIRECTORY - Onde estão os arquivos vigentes, ainda

    não adicionados nem commitados ▸ INDEX (STAGE) - É uma árvore temporária de arquivos adicionados. ▸ HEAD (Ta valendo) - Area que aponta o ultimo commit de alterações confirmadas que você realizou. FLUXO DE TRABALHO NO GIT
  30. ▸ Commited: O arquivo está sob controle de versão e

    não apresenta nenhuma modificação. ▸ Commit candidate: Quando você adiciona as modificações (commit), esses serão os arquivos incluídos. ▸ Modified: Arquivos que foram modificados. ▸ Untracked: Arquivos novos, que ainda não estão sendo monitorados pelo Git. OS 4 ESTADOS DOS ARQUIVOS NO GIT
  31. INICIANDO UM REPOSITORIO LOCAL $ git init ▸ Cria um

    repositório LOCAL com a estrutura do git ▸ A pasta que contém a pasta “.git” ▸ Contém todos os metadados do seu repositório e as versões disponíveis $ git remote add origin <servidor>
  32. CLONANDO UM REPOSITORIO REMOTO $ git clone https://github.com/user/repositorio.git VIA HTTPS

    $ git clone git@github.com:user/repositorio.git VIA SSH
  33. CONFIGURANDO O GIT

  34. CRIANDO E DANDO CHECKOUT NAS BRANCHES $ git checkout -b

    novabranch branchorigem PARA CRIAR UMA BRANCH A PARTIR DE OUTRA $ git checkout branch TROCANDO DE BRANCH
  35. None
  36. IDENTIFICANDO AS BRANCHES $ git branch PARA VERIFICAR AS BRANCHS

    UTILIZADAS $ git branch --all VERIFICAR TODAS AS BRANCHES EXISTENTES NO PROJETO
  37. None
  38. O COMANDO MAIS IMPORTANTE DO GIT $ git status ▸

    Exibe o status da branch, e todos os arquivos. ▸ Deve se usar sem moderação. ▸ Exibe o status das árvores, branch atual, histórico de arquivos modificados, adicionados, criados e apagados
  39. None
  40. ADICIONANDO UM ARQUIVO / TODOS $ git add arquivo.php $

    git add pasta/ $ git add * ▸ Adiciona os arquivos para o Index (Stage)
  41. None
  42. REMOVENDO UM ARQUIVO DA INDEX $ git reset arquivo.php HEAD

    ▸ Retorna o arquivo para o estágio de unstaged
  43. None
  44. LIMPANDO ARQUIVOS UNTRACKED $ git clean -df ▸ Limpa todos

    arquivos não traqueados da sua branch
  45. CRIANDO UM COMMIT $ git commit -m "modifiquei o sistema

    de checkout" ▸ Cria um commit das modificações executadas $ git commit -am "modifiquei os boletos" ▸ Cria um commit das modificações executadas já adicionando todos os commits candidates (add * )
  46. CRIANDO PUSH PARA O REMOTE $ git push origin <branch>

    ▸ Enviamos nossas modificações commitadas para o remote.
  47. None
  48. SOLICITANDO UM PULL DAS MODIFICAÇÕES DO SERVIDOR $ git pull

    origin <branch> ▸ Git pull é um “syntax sugar” para “git fetch ; git merge HEAD”, onde são baixadas as modificações da branch e as mesmas são “merjadas” com a HEAD atual.
  49. None
  50. EFETUANDO O MERGE DE DUAS BRANCHES $ git merge <branch>

    ▸ O Merge é uma das tarefas mais complexas que o git faz, perde somente para o rebase, outra alteranativa para o merge. ▸ O Merge vai olhar para as duas branches (a atual e a de origem), encontrar os commits em comum e aplicar os commits que a branch atual não tem em cima.
  51. None
  52. REBASE - ALTERNATIVA MAIS COMPLEXA AO MERGE $ git rebase

    <branch> ▸ É mais uma forma de mover commits entre branchs do Git ▸ No Rebase, os seus commits (acima da base) são temporariamente apagados. ▸ A branch atual fica exatamente igual ao outro branch e seus commits são aplicados um a um no branch atual. ▸ Ideal para manter o histórico intacto.
  53. VERIFICANDO UM DIFF DE UM ARQUIVO $ git diff file

    ▸ É o visualizador de diffs default do git. ▸ Ele mostra as linhas modificadas de um arquivo apontado. ▸ Caso o arquivo seja muito grande ele vai abrir um “less” em shell para melhor visualização. ▸ “+” Representa as linhas adicionadas ▸ “-” Representa as linhas removidas/substituidas
  54. None
  55. ▸ O Netbeans tem plugin nativo (FODA) de Git que

    ajuda no historico e nos diffs ▸ O Sublime tem alguns packages que ajudam -> Sublime GIT -> GitStatus ▸ Atom tem muitos tbm... VERIFICANDO UM DIFF DE UM ARQUIVO
  56. IH, DEU RUIM! - It's Dangerous To Go Alone

  57. VERIFICANDO CONFLITOS $ git ls-files -u ▸ Lista todos os

    conflitos encontrados durante o merge.
  58. VERIFICANDO CONFLITOS $ git status; $ git diff <arquivo>

  59. None
  60. None
  61. REVERTENDO ALTERAÇÕES LOCAIS $ git checkout -- <arquivo> ▸ Modifiquei,

    deu ruim, é mais fácil refazer… CHECKOUT NELE! ▸ Substitui as alterações do arquivo pelo conteúdo mais recente do mesmo presente do HEAD. ▸ Alterações já adicionadas ao Index (Stage) e novos arquivos serão mantidos.
  62. VERIFICANDO OS LOGS DOS COMMITS $ git log ▸ Verifica

    as alterações efetuadas no repositório e parseia de uma forma mais amigável. ▸ Exibe as hashes dos commits e seus respectivos autores.
  63. None
  64. REVERTENDO ALTERAÇÕES LOCAIS $ git fetch origin $ git reset

    --hard origin/master ▸ ZOEI TODO O MEU LOCAL!!! E agora??? Descarte todos os commits locais e baixe uma nova cópia novinha do servidor! ▸ Todas as suas alterações locais (sem o push) vão voltar para o estado original do servidor. ▸ CUIDADO. Vai descartar tudo MESMO!
  65. ROLLBACK EM COMMITS $ git reset --hard hashdocommit $ git

    reset --hard HEAD˜10 ▸ Podemos dar um reset na hash de um commit específico, voltando todo o estado do head para o estado commit especificado (git log) ▸ Podemos voltar também um número específico de commits para trás.
  66. STASH EM ARQUIVOS $ git reset --hard hashdocommit $ git

    reset --hard HEAD˜10 ▸ Podemos “Encostar” arquivos pra navegar entre as branches do nosso projeto e “soltar” elas. ▸ É um modo inteligente de mover arquivos entre branches ▸ É também um modo inteligente de retirar arquivos e trocar de branches
  67. APOIO ▸ https://services.github.com/kit/downloads/github-g it-cheat-sheet.pdf ▸ https://git-scm.com/book/en/v2/Getting-Started-Git -Basics ▸ https://git-scm.com/about/distributed ▸

    http://rogerdudler.github.io/git-guide/index.pt_BR.h tml ▸ https://education.github.com/git-cheat-sheet-educa tion.pdf
  68. QUE A FORÇA ESTEJA COM VOCÊS! PERGUNTAS??