Git para iniciantes v1.1.0 @ IV FSLDC

837 views

Published on

Apresentada em 30/06/12 no IV FSLDC. 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
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
837
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
19
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • * Trabalho com web a aproximadamente 4 anos\n* Front end\n* PHP e MySQL\n* Ruby/Rails PostgreSQL\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
  • Faltou bastante coisa legal como:\n- Branches\n- trabalho em equipe\n- ignorando arquivos\n- etc...\n
  • \n
  • \n
  • Git para iniciantes v1.1.0 @ IV FSLDC

    1. 1. Git para iniciantes
    2. 2. Git para iniciantes 1.1.0
    3. 3. Mauro... quem?
    4. 4. Mauro George http://maurogeorge.github.com http://www.aprenderphp.com.br @maurogeorge
    5. 5. Sistemas de controle de versão VCS (Version control systems)
    6. 6. Pra que?
    7. 7. Pra que? Gerenciar diferentes versões de um arquivo
    8. 8. Pra que? Guardar histórico de alterações de um arquivo
    9. 9. Pra que? Saber quem fez e o porquê de cada alteração
    10. 10. Vantagens
    11. 11. Vantagens Backup automático
    12. 12. Vantagens Controle do histórico
    13. 13. Vantagens Trabalho em equipe
    14. 14. Vantagens Marcação e resgate de versões estáveis
    15. 15. Vantagens Ramificação do projeto
    16. 16. Diferentes modelos
    17. 17. Centralizado
    18. 18. Centralizado Necessita de um servidor central
    19. 19. Centralizado O checkout é uma cópia da estrutura dos arquivos do repositório
    20. 20. Centralizado Somente usuários autorizados podem fazer commits
    21. 21. Centralizado
    22. 22. Distribuído
    23. 23. Distribuído Cada cópia é um repositório com o histórico completo
    24. 24. Distribuído Não necessita de acesso a rede ou um servidor central
    25. 25. Distribuído Commits podem ser feitos offline
    26. 26. Distribuído Commits podem ser facilmente transferidos entre repositórios
    27. 27. Distribuído
    28. 28. Distribuído
    29. 29. Pesquisa
    30. 30. Pesquisa Utiliza: Nenhum Subversion Mercurial Git Outro
    31. 31. Git
    32. 32. Git Open source
    33. 33. Git Desenvolvido originalmente por Linus Torvalds, com o objetivo de...
    34. 34. Git .. manter o Kernel do Linux
    35. 35. Git “focado em velocidade, efetividade e usabilidade do mundo real em grandes projetos”
    36. 36. Instalação
    37. 37. Instalação Mac DMG http://code.google.com/p/git-osx-installer/downloads/list?can=3 Homebrew (mxcl.github.com/homebrew) $ brew install git
    38. 38. Instalação Linux apt-get $ sudo apt-get install git-core git-gui git-doc
    39. 39. Instalação Windows msysgit http://code.google.com/p/msysgit/downloads/list * Use Git Bash Only ** Checkout Windows-style, commit Unix-style line endings
    40. 40. GUIs
    41. 41. GUIs Gitk para todas as plataformas
    42. 42. GUIs GitX (L) para Mac http://gitx.laullon.com/ *GitX -> Enable Terminal Usage
    43. 43. GUIs Gitg para Linux Gerenciador de pacotes
    44. 44. GUIs tortoisegit para Windows http://code.google.com/p/tortoisegit/
    45. 45. Primeiros passos
    46. 46. Primeiros passos Configuração $ git config --global user.name "Mauro George" $ git config --global user.email "maurogot@gmail.com"
    47. 47. Primeiros passos Criando nosso projeto $ mkdir project $ cd project $ touch hello_world.php
    48. 48. Primeiros passos Criando um repositório $ git init
    49. 49. Primeiros passos Criando um repositório $ git init Output: Initialized empty Git repository in /path/to/my/project/.git/
    50. 50. Primeiros passos Primeiro commit $ git add . $ git commit -m "first commit"
    51. 51. 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
    52. 52. Primeiros passos Primeiro commit $ git status
    53. 53. Primeiros passos Primeiro commit $ git status Output: # On branch master nothing to commit (working directory clean)
    54. 54. Fluxo básico
    55. 55. Fluxo básico Estado dos arquivos Untracked Modified Staged Commited
    56. 56. Fluxo básico Estado dos arquivos Untracked Arquivos que o git não conhece
    57. 57. Fluxo básico Estado dos arquivos Untracked $ touch Readme $ git status
    58. 58. 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)
    59. 59. Fluxo básico Estado dos arquivos Modified Arquivos que o git já conhece e que foram alterados
    60. 60. Fluxo básico Estado dos arquivos Modified $ vim hello_world.php <?php echo 'Hello world'; ?>
    61. 61. Fluxo básico Estado dos arquivos Modified $ git status
    62. 62. 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")
    63. 63. Fluxo básico Estado dos arquivos Staged Arquivos que serão enviados para o repositório
    64. 64. Fluxo básico Estado dos arquivos Staged $ git add hello_world.php $ git status
    65. 65. 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
    66. 66. Fluxo básico Estado dos arquivos Commited Arquivos que já estão no repositório git
    67. 67. Fluxo básico Estado dos arquivos Commited $ git commit -m "showing hello world"
    68. 68. 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(-)
    69. 69. Fluxo básico Estado dos arquivos Commited $ git status
    70. 70. 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)
    71. 71. Dica Colorindo o output $ git config --global color.ui true
    72. 72. 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”
    73. 73. 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
    74. 74. Comandos
    75. 75. Comandos git diff Visualiza o que foi modificado
    76. 76. Comandos git diff $ vim hello_world.php <?php echo 'Hello world, no IV FSLDC'; ?>
    77. 77. Comandos git diff $ git diff
    78. 78. 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 IV FSLDC'; ?> No newline at end of file
    79. 79. Comandos git diff --word-diff Visualiza o que foi modificado, diferenciando por palavras
    80. 80. Comandos git diff --word-diff $ git diff --word-diff
    81. 81. 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 IV FSLDC';+} ?> No newline at end of file
    82. 82. Comandos git diff --cached Visualiza o que foi modificado e está staged
    83. 83. Comandos git diff --cached $ git add hello_world.php $ git status
    84. 84. 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
    85. 85. Comandos git diff --cached $ git diff
    86. 86. Comandos git diff --cached $ git diff Output:
    87. 87. Comandos git diff --cached $ git diff --cached
    88. 88. 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 IV FSLDC'; ?> No newline at end of file
    89. 89. Comandos Commitando nossas alterações para continuarmos... $ git commit -m "change hello world message"
    90. 90. Comandos git commit -am Envia de modified para commited diretamente
    91. 91. Comandos git commit -am $ vim hello_world.php <?php echo 'Hello world, no IV FSLDC em 30/06/2012'; ?>
    92. 92. Comandos git commit -am $ git status
    93. 93. 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")
    94. 94. Comandos git commit -am $ git commit -am "added date on hello world"
    95. 95. 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(-)
    96. 96. Comandos git commit -am $ git status
    97. 97. 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)
    98. 98. Dica Se o git não conhece ele não mexe
    99. 99. Comandos Editando e commitando o Readme para continuarmos... $ vim Readme $ git add Readme $ git commit -m "added readme"
    100. 100. Comandos git log Exibe o histórico com infomações dos commits
    101. 101. Comandos git log $ git log
    102. 102. 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
    103. 103. Comandos git log --oneline Exibe o log em apenas uma linha
    104. 104. Comandos git log --oneline $ git log --oneline
    105. 105. 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
    106. 106. Voltando no tempo
    107. 107. Voltando no tempo git checkout <hash> Volta para o commit informado em <hash>
    108. 108. Voltando no tempo git checkout <hash> $ git checkout bf3bd62
    109. 109. Voltando no tempo git checkout <hash> Hash do primeiro commit $ git checkout bf3bd62
    110. 110. 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
    111. 111. Voltando no tempo git checkout <hash> $ ls hello_world.php $ cat hello_world.php
    112. 112. Voltando no tempo git checkout <hash> De volta para o futuro $ git checkout master
    113. 113. 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'
    114. 114. 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 IV FSLDC em 30/06/2012'; ?>
    115. 115. Voltando no tempo git revert <hash> Reverte um commit criando um novo
    116. 116. Voltando no tempo git revert <hash> $ git revert 518bad1
    117. 117. Voltando no tempo git revert <hash> $ git revert 518bad1 Hash do quarto commit. Em que foi adicionada a data
    118. 118. 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(-)
    119. 119. 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
    120. 120. Voltando no tempo git revert <hash> $ cat hello_world.php <?php echo 'Hello world, no IV FSLDC'; ?>
    121. 121. 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
    122. 122. Voltando no tempo git checkout <hash> <arquivo> Recupera o arquivo do commit informado
    123. 123. Voltando no tempo git checkout <hash> <arquivo> $ git checkout 83d672c hello_world.php
    124. 124. Voltando no tempo git checkout <hash> <arquivo> $ git checkout 83d672c hello_world.php Hash do segundo commit. Em que foi criada a mensagem
    125. 125. Voltando no tempo git checkout <hash> <arquivo> $ git status
    126. 126. 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 #
    127. 127. Voltando no tempo git checkout <hash> <arquivo> $ git diff --cached
    128. 128. 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 IV FSLDC'; + echo 'Hello world'; ?> No newline at end of file
    129. 129. Voltando no tempo git checkout . Recupera todos os arquivos sobreescrevendo as mudanças locais
    130. 130. Voltando no tempo git checkout . $ vim hello_world.php $ vim Readme
    131. 131. Voltando no tempo git checkout . $ vim hello_world.php $ vim Readme
    132. 132. Voltando no tempo git checkout . $ git status
    133. 133. 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")
    134. 134. Voltando no tempo git checkout . $ git checkout .
    135. 135. Voltando no tempo git checkout . $ git status
    136. 136. Voltando no tempo git checkout . $ git status Output: # On branch master nothing to commit (working directory clean)
    137. 137. Perguntas?
    138. 138. Obrigado! @maurogeorge maurogeorge.github.com

    ×