Git para iniciantes v1.2.0 @ PHP‘n Rio 2012

1,922 views

Published on

Apresentada em 10/11/12 no PHP‘n Rio 2012. Na palestra você verá uma introdução aos sistemas de controle de versão, passando pelos modelos centralizado e distribuído. Um pouco da história do git, a instalação e GUIs para Mac, Linux e Windows. As configurações e o fluxo básico para o dia a dia. Além de alguns comandos e dicas que ajudarão no dia a dia com o git, inclusive para quem já usa o git no seu dia a dia

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,922
On SlideShare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
32
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • * Trabalho com web a aproximadamente 5 anos\n\n
  • * Front end\n* PHP e MySQL\n\n
  • * Ruby/Rails\n* PostgreSQL\n* XP\n
  • \n
  • \n
  • * Aprender PHP está pausado\n* maurogeorge.github.com blog em que falo de outras coisas além de PHP\n\n
  • * Sistema que guarda alterações dos arquivos com o passar do tempo\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • * pode voltar para qualquer commit quando quiser\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • * de uma revisão especifica, no distribuído temos o repositório todo\n
  • dificultando a contribuição nos projetos open source\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • - Instalar os 3 pacotes\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Modified ou unstaged, usaremos nos exemplos modified\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • - Output no próximo slide pois é muito grande\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • * Hosting de repositórios git, compartilhar código seja trabalho, open source, estudos, amigos, ferramentas colaborativas\n* Fundadado 2008, San Francisco. Mais de 2 milhões de pessoas usam\n* hosting de projetos open source grátis, alavancou o open source\n
  • apenas o DHH\n
  • Milhares de colaboradores\n* 4k+ forks\n* 16k+ Stars\n\n
  • Boleto PHP\n* Projeto\n* Israel, Grupo PHP Rio e Eu\n\n\n
  • \n
  • * Participar da comunidade \n* Open Source\n* Aprender coisa nova, OOP, PHP Edge, temos testes etc\n
  • Faltou bastante coisa legal como:\n- Branches\n- trabalho em equipe (remotes)\n- ignorando arquivos\n- etc...\n
  • \n
  • \n
  • Git para iniciantes v1.2.0 @ PHP‘n Rio 2012

    1. 1. Git para iniciantes
    2. 2. Git para iniciantes 1.2.0
    3. 3. Mauro... quem?
    4. 4. Mauro... quem?
    5. 5. Mauro... quem?
    6. 6. Mauro George http://maurogeorge.github.com http://www.aprenderphp.com.br @maurogeorge
    7. 7. Sistemas de controle de versão VCS (Version control systems)
    8. 8. Pra que?
    9. 9. Pra que? Gerenciar diferentes versões de um arquivo
    10. 10. Pra que? Guardar histórico de alterações de um arquivo
    11. 11. Pra que? Saber quem fez e o porquê de cada alteração
    12. 12. Vantagens
    13. 13. Vantagens Backup automático
    14. 14. Vantagens Controle do histórico
    15. 15. Vantagens Trabalho em equipe
    16. 16. Vantagens Marcação e resgate de versões estáveis
    17. 17. Vantagens Ramificação do projeto
    18. 18. Diferentes modelos
    19. 19. Centralizado
    20. 20. Centralizado Necessita de um servidor central
    21. 21. Centralizado O checkout é uma cópia da estrutura dos arquivos do repositório
    22. 22. Centralizado Somente usuários autorizados podem fazer commits
    23. 23. Centralizado
    24. 24. Distribuído
    25. 25. Distribuído Cada cópia é um repositório com o histórico completo
    26. 26. Distribuído Não necessita de acesso a rede ou um servidor central
    27. 27. Distribuído Commits podem ser feitos offline
    28. 28. Distribuído Commits podem ser facilmente transferidos entre repositórios
    29. 29. Distribuído
    30. 30. Distribuído
    31. 31. Pesquisa
    32. 32. Pesquisa Utiliza: Nenhum Subversion Mercurial Git Outro
    33. 33. Git
    34. 34. Git Open source
    35. 35. Git Desenvolvido originalmente por Linus Torvalds, com o objetivo de...
    36. 36. Git .. manter o Kernel do Linux
    37. 37. Git “focado em velocidade, efetividade e usabilidade do mundo real em grandes projetos”
    38. 38. Instalação
    39. 39. Instalação Mac DMG http://code.google.com/p/git-osx-installer/downloads/list?can=3 Homebrew (mxcl.github.com/homebrew) $ brew install git
    40. 40. Instalação Linux apt-get $ sudo apt-get install git-core git-gui git-doc
    41. 41. Instalação Windows msysgit http://code.google.com/p/msysgit/downloads/list * Use Git Bash Only ** Checkout Windows-style, commit Unix-style line endings
    42. 42. GUIs
    43. 43. GUIs Gitk para todas as plataformas
    44. 44. GUIs GitX (L) para Mac http://gitx.laullon.com/ *GitX -> Enable Terminal Usage
    45. 45. GUIs Gitg para Linux Gerenciador de pacotes
    46. 46. GUIs tortoisegit para Windows http://code.google.com/p/tortoisegit/
    47. 47. Primeiros passos
    48. 48. Primeiros passos Configuração $ git config --global user.name "Mauro George" $ git config --global user.email "maurogot@gmail.com"
    49. 49. Primeiros passos Criando nosso projeto $ mkdir project $ cd project $ touch hello_world.php
    50. 50. Primeiros passos Criando um repositório $ git init
    51. 51. Primeiros passos Criando um repositório $ git init Output: Initialized empty Git repository in /path/to/my/project/.git/
    52. 52. Primeiros passos Primeiro commit $ git add . $ git commit -m "first commit"
    53. 53. Primeiros passos Primeiro commit $ git add . $ git commit -m "first commit" Output: [master (root-commit) bf3bd62] first commit 0 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 hello_world.php
    54. 54. Primeiros passos Primeiro commit $ git status
    55. 55. Primeiros passos Primeiro commit $ git status Output: # On branch master nothing to commit (working directory clean)
    56. 56. Fluxo básico
    57. 57. Fluxo básico Estado dos arquivos Untracked Modified Staged Commited
    58. 58. Fluxo básico Estado dos arquivos Untracked Arquivos que o git não conhece
    59. 59. Fluxo básico Estado dos arquivos Untracked $ touch Readme $ git status
    60. 60. Fluxo básico Estado dos arquivos Untracked $ touch Readme $ git status Output: # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # Readme nothing added to commit but untracked files present (use "git add" to track)
    61. 61. Fluxo básico Estado dos arquivos Modified Arquivos que o git já conhece e que foram alterados
    62. 62. Fluxo básico Estado dos arquivos Modified $ vim hello_world.php <?php echo 'Hello world'; ?>
    63. 63. Fluxo básico Estado dos arquivos Modified $ git status
    64. 64. Fluxo básico Estado dos arquivos Modified Output: # 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: hello_world.php # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # Readme no changes added to commit (use "git add" and/or "git commit -a")
    65. 65. Fluxo básico Estado dos arquivos Staged Arquivos que serão enviados para o repositório
    66. 66. Fluxo básico Estado dos arquivos Staged $ git add hello_world.php $ git status
    67. 67. Fluxo básico Estado dos arquivos Staged $ git add hello_world.php $ git status Output: # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: hello_world.php # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # Readme
    68. 68. Fluxo básico Estado dos arquivos Commited Arquivos que já estão no repositório git
    69. 69. Fluxo básico Estado dos arquivos Commited $ git commit -m "showing hello world"
    70. 70. Fluxo básico Estado dos arquivos Commited $ git commit -m "showing hello world" Output: [master 83d672c] showing hello world 1 files changed, 3 insertions(+), 0 deletions(-)
    71. 71. Fluxo básico Estado dos arquivos Commited $ git status
    72. 72. Fluxo básico Estado dos arquivos Commited $ git status Output: # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # Readme nothing added to commit but untracked files present (use "git add" to track)
    73. 73. Dica Colorindo o output $ git config --global color.ui true
    74. 74. Fluxo básico Resumo Editar os arquivos Vim / emacs / textmate / etc Colocar os arquivos em staged git add nome do arquivo Verificar as mudanças git status Fazer o commit das mudanças git commit -m “mensagem do commit”
    75. 75. Dica Sempre leia as mensagens do Git Output: # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: hello_world.php # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # Readme
    76. 76. Comandos
    77. 77. Comandos git diff Visualiza o que foi modificado
    78. 78. Comandos git diff $ vim hello_world.php <?php echo “Hello world, no PHP'n Rio 2012”; ?>
    79. 79. Comandos git diff $ git diff
    80. 80. Comandos git diff $ git diff Output: diff --git a/hello_world.php b/hello_world.php index fe71dc6..04beafa 100644 --- a/hello_world.php +++ b/hello_world.php @@ -1,3 +1,3 @@ <?php - echo 'Hello world'; + echo “Hello world, no PHP'n Rio 2012”; ?> No newline at end of file
    81. 81. Comandos git diff --word-diff Visualiza o que foi modificado, diferenciando por palavras
    82. 82. Comandos git diff --word-diff $ git diff --word-diff
    83. 83. Comandos git diff --word-diff $ git diff --word-diff Output: diff --git a/hello_world.php b/hello_world.php index fe71dc6..04beafa 100644 --- a/hello_world.php +++ b/hello_world.php @@ -1,3 +1,3 @@ <?php echo “Hello [-world”;-]{+world, no PHP'n Rio 2012”;+} ?> No newline at end of file
    84. 84. Comandos git diff --cached Visualiza o que foi modificado e está staged
    85. 85. Comandos git diff --cached $ git add hello_world.php $ git status
    86. 86. Comandos git diff --cached $ git add hello_world.php $ git status Output: # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: hello_world.php ## Untracked files: # (use "git add <file>..." to include in what will be committed) # # Readme
    87. 87. Comandos git diff --cached $ git diff
    88. 88. Comandos git diff --cached $ git diff Output:
    89. 89. Comandos git diff --cached $ git diff --cached
    90. 90. Comandos git diff --cached $ git diff --cached Output: diff --git a/hello_world.php b/hello_world.php index fe71dc6..04beafa 100644 --- a/hello_world.php +++ b/hello_world.php @@ -1,3 +1,3 @@ <?php - echo 'Hello world'; + echo “Hello world, no PHP'n Rio 2012”; ?> No newline at end of file
    91. 91. Comandos Commitando nossas alterações para continuarmos... $ git commit -m "change hello world message"
    92. 92. Comandos git commit -am Envia de modified para commited diretamente
    93. 93. Comandos git commit -am $ vim hello_world.php <?php echo “Hello world, no PHP'n Rio 2012 em 10/11/2012”; ?>
    94. 94. Comandos git commit -am $ git status
    95. 95. Comandos git commit -am $ git status Output: # 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: hello_world.php ## Untracked files: # (use "git add <file>..." to include in what will be committed) ## Readme no changes added to commit (use "git add" and/or "git commit -a")
    96. 96. Comandos git commit -am $ git commit -am "added date on hello world"
    97. 97. Comandos git commit -am $ git commit -am "added date on hello world" Output: [master 518bad1] added date on hello world 1 files changed, 1 insertions(+), 1 deletions(-)
    98. 98. Comandos git commit -am $ git status
    99. 99. Comandos git commit -am $ git status Output: # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # Readme nothing added to commit but untracked files present (use "git add" to track)
    100. 100. Dica Se o git não conhece ele não mexe
    101. 101. Comandos Editando e commitando o Readme para continuarmos... $ vim Readme $ git add Readme $ git commit -m "added readme"
    102. 102. Comandos git log Exibe o histórico com infomações dos commits
    103. 103. Comandos git log $ git log
    104. 104. Comandos git log $ git log Output: commit a6aa0cb4d832a3a7c3a26001d89d8698e73790bb Author: Mauro George <maurogot@gmail.com> Date: Fri Jan 20 15:59:33 2012 -0200 added readme commit 518bad17f1bc064f4d542683925ae9f1003609bd Author: Mauro George <maurogot@gmail.com> Date: Fri Jan 20 15:27:07 2012 -0200 added date on hello world
    105. 105. Comandos git log --oneline Exibe o log em apenas uma linha
    106. 106. Comandos git log --oneline $ git log --oneline
    107. 107. Comandos git log --oneline $ git log --oneline Output: 53bc92d Revert "added date on hello world" a6aa0cb added readme 518bad1 added date on hello world 0e1b665 change hello world message 83d672c showing hello world bf3bd62 first commit
    108. 108. Voltando no tempo
    109. 109. Voltando no tempo git checkout <hash> Volta para o commit informado em <hash>
    110. 110. Voltando no tempo git checkout <hash> $ git checkout bf3bd62
    111. 111. Voltando no tempo git checkout <hash> Hash do primeiro commit $ git checkout bf3bd62
    112. 112. Voltando no tempo git checkout <hash> Hash do primeiro commit $ git checkout bf3bd62 Output: Note: checking out 'bf3bd62'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b new_branch_name HEAD is now at bf3bd62... first commit
    113. 113. Voltando no tempo git checkout <hash> $ ls hello_world.php $ cat hello_world.php
    114. 114. Voltando no tempo git checkout <hash> De volta para o futuro $ git checkout master
    115. 115. Voltando no tempo git checkout <hash> De volta para o futuro $ git checkout master Output: Previous HEAD position was bf3bd62... first commit Switched to branch 'master'
    116. 116. Voltando no tempo git checkout <hash> De volta para o futuro $ ls Readme hello_world.php $ cat hello_world.php <?php echo “Hello world, no PHP'n Rio 2012 em 10/11/2012”; ?>
    117. 117. Voltando no tempo git revert <hash> Reverte um commit criando um novo
    118. 118. Voltando no tempo git revert <hash> $ git revert 518bad1
    119. 119. Voltando no tempo git revert <hash> $ git revert 518bad1 Hash do quarto commit. Em que foi adicionada a data
    120. 120. Voltando no tempo git revert <hash> $ git revert 518bad1 Hash do quarto commit. Em que foi adicionada a data Output: [master 53bc92d] Revert "added date on hello world" 1 files changed, 1 insertions(+), 1 deletions(-)
    121. 121. Voltando no tempo git revert <hash> $ git revert 518bad1 Hash do quarto commit. Em que foi adicionada a data Output: [master 53bc92d] Revert "added date on hello world" 1 files changed, 1 insertions(+), 1 deletions(-) * Será solicitado para digitar uma mensagem do commit, mantenha a padrão por convenção
    122. 122. Voltando no tempo git revert <hash> $ cat hello_world.php <?php echo “Hello world, no PHP'n Rio 2012”; ?>
    123. 123. Dica Commits pequenos e constantes Boa mensagem de commit Created model of User Má mensagem de commit Created model of User, Post and Comments and added template files
    124. 124. Voltando no tempo git checkout <hash> <arquivo> Recupera o arquivo do commit informado
    125. 125. Voltando no tempo git checkout <hash> <arquivo> $ git checkout 83d672c hello_world.php
    126. 126. Voltando no tempo git checkout <hash> <arquivo> $ git checkout 83d672c hello_world.php Hash do segundo commit. Em que foi criada a mensagem
    127. 127. Voltando no tempo git checkout <hash> <arquivo> $ git status
    128. 128. Voltando no tempo git checkout <hash> <arquivo> $ git status Output: # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) ## modified: hello_world.php #
    129. 129. Voltando no tempo git checkout <hash> <arquivo> $ git diff --cached
    130. 130. Voltando no tempo git checkout <hash> <arquivo> $ git diff --cached Output: diff --git a/hello_world.php b/hello_world.php index 04beafa..fe71dc6 100644 --- a/hello_world.php +++ b/hello_world.php @@ -1,3 +1,3 @@ <?php - echo “Hello world, no PHP'n Rio 2012”; + echo 'Hello world'; ?> No newline at end of file
    131. 131. Voltando no tempo git checkout . Recupera todos os arquivos sobreescrevendo as mudanças locais
    132. 132. Voltando no tempo git checkout . $ vim hello_world.php $ vim Readme
    133. 133. Voltando no tempo git checkout . $ vim hello_world.php $ vim Readme
    134. 134. Voltando no tempo git checkout . $ git status
    135. 135. Voltando no tempo git checkout . $ git status Output: # 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: Readme # modified: hello_world.php #n o changes added to commit (use "git add" and/or "git commit -a")
    136. 136. Voltando no tempo git checkout . $ git checkout .
    137. 137. Voltando no tempo git checkout . $ git status
    138. 138. Voltando no tempo git checkout . $ git status Output: # On branch master nothing to commit (working directory clean)
    139. 139. vimeo.com/2979844 23 de janeiro de 2005 Github
    140. 140. Github 19 de janeiro de 2009 vimeo.com/2979844
    141. 141. Boleto PHP https://github.com/BielSystems/boletophp/
    142. 142. Boleto PHP https://github.com/BielSystems/boletophp/
    143. 143. Boleto PHP
    144. 144. Perguntas?
    145. 145. Obrigado! @maurogeorge maurogeorge.github.com

    ×