aboutsummaryrefslogtreecommitdiff
path: root/aulas/versionamento.rst
blob: ff1d84452827bdd0307f63598f84a448d1b2695b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
4. Controle de versão e social coding
=====================================

4.1 - O que é? Pra que serve?
-----------------------------

Tópicos:

* Salvar o estado do código em revisões sequenciais.
* Integrar o trabalho do time.
* Acompanhar as mudanças no código (encontrar bugs, rollback, etc).
* Boa prática: versionando desde o dia 0.
* Ajuda, mas não resolve conflitos na edição de arquivos.

Imagens:

* https://git-scm.com/book/en/v2/book/01-introduction/images/local.png

4.2 - Quais sistemas existem?
-----------------------------

Tópicos:

* RCS (pré-histórico).
* CVS (roots, centralizado).
* Subversion (svn) (tradicional, centralizado).
* Mercurial (hg), Monotone (mtn), Bazaar (bzr), Darcs, Git (modernos, distribuídos).

Imagens:

* Ícones e screenshots do site de cada sistema.

4.2 - Centralizados versus distribuídos
---------------------------------------

Tópicos:

* Centralizado:

  * Repositório central para onde são enviadas mudanças.
  * Ou seja, existe uma cópia de referência.

* Distribuído:

  * Cada cópia de trabalho é um repositório completo e possui todo o histórico de revisões (também uma forma de backup).
  * Não requer um repositório central, porém um ponto de trocas central pode ser estipulado entre os desenvolvedores/as.

Imagens:

* Centralizado: http://phillihp.com/wp-content/uploads/2012/06/scm.png
* Distribuído: https://git-scm.com/book/en/v2/book/01-introduction/images/distributed.png

4.3 - Git: introdução
---------------------

4.3 - Características
~~~~~~~~~~~~~~~~~~~~~

* Desenvolvido inicialmente por Linus Torvalds.
* É o mais popular e difundido.
* Complexo e poderoso, porém pode ser usado de modo simples.
* Checagem de integridade nativa!

4.3 - Instalando
~~~~~~~~~~~~~~~~

* Focaremos em git pela linha de comando.
* Disponível em tudo que é tipo de sistema operacional.

4.3 - Configurando
~~~~~~~~~~~~~~~~~~

A única exigência é especificar um nome e email (de preferência funcional ;)
ara constar nas informações de revisão.

Roteiro do screencast:

::

  sudo apt-get install git
  git config --global user.name  "Meu Nome"
  git config --global user.email "meu@email.tld"

4.3 - Repositórios
~~~~~~~~~~~~~~~~~~

* Repositórios: "pastas geridas pelo git".
* Pasta ".git" criada no repositório: não polui seu projeto.

Roteiro do screencast:

::

  # Adicionando nosso projeto no git
  cd ~/projetos/blogatico
  git init

  # Clonando um projeto existente
  cd ~/projetos/
  git clone https://github.com/rhatto/boaspraticas

4.3 - Trabalhando no projeto
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* Três estágios de mudanças: cometidas (commited), marcadas para commit (staged) e modificadas (changed).

Roteiro do screencast:

::

  cd ~/projetos/blogatico
  gedit README.md   # edite seu arquivo
  git status
  git add README.md # em seguida edite mais um pouco
  git status
  git diff
  git commit -m "Primeira revisão"
  git add README.md # mudanças recentes adicionadas ao estágio de lançamento
  git commit -m "Segunda revisão"
  git commit -a -m "Terceira revisão" # coloca todas as mudanças no estágio e comete

  # Agora vamos programar um pouco...
  mkdir bin
  touch bin/build
  chmod +x bin/build
  gedit bin/build

Imagens:

* https://git-scm.com/book/en/v2/book/01-introduction/images/areas.png

4.4 - Git: navegando no histórico
---------------------------------

* Entendendo um commit.
* Tags (etiquetas).

4.4 - Log de revisões
~~~~~~~~~~~~~~~~~~~~~

* Árvore de histórico do repositório.
* Cada "revisão" do histórico representa um estado do repositório (snapshot).
* ID da revisão: hash SHA-1.

Roteiro do screencast:

::

  cd ~/projetos/blogatico
  git log
  git cola
  gitk

Imagens:

* https://git-cola.github.io/images/screenshot-main-linux.png
* https://static.lwn.net/images/ns/kernel/gitk.png

4.4 - Revertendo uma mudança
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* Você pode fazer um novo commit na unha ou usar o ferramental do git.

Roteiro do screencast:

::

  git commit --amend
  git revert
  git rebase

4.5 - Ramificações (branches e merges)
--------------------------------------

* Existem vários "ramos" na história de um software.
* Os ramos, ou branches, divergem e convergem.
* A convergência nem sempre é suave, porém o git auxilia com várias estratégias.

Roteiro do screencast:

::

  cd ~/projetos/blogatico
  git branch develop
  git checkout develop
  git commit
  git checkout master
  git merge develop

4.6 - Usando o git-flow
-----------------------

* O git-flow é um plugin para o git.
* Ele força um fluxo de trabalho integrado.
* Branches básicos (nomes podem ser customizados):

  * master: branch principal com o código que é submetido para a produção.
  * develop: branch de desenvolvimento onde funcionalidades são integradas e seu conjunto testado.
  * features/: prefixo para branches onde funcionalidades são desenvolvidas.
  * hotfix/: prefixo para branches de correções rápidas (bugfixes).

Roteiro do screencast:

::

  cd ~/projetos/blogatico
  git flow init
  git flow feature start doc

4.7 - Submódulos
----------------

* Um repositório git dentro de outro.
* Trava em revisões específicas.
* "Sistema de empacotamento" simples e integrado ao git.

Roteiro do screencast:

::

  # No repositorio
  cd ~/projetos/blogatico
  git submodule add https://github.com/dhg/Skeleton skeleton
  git commit -a -m "Adiciona skeleton"

  # Clonando o repositorio noutro local
  cd ..
  git clone projeto projeto-clonado
  cd projeto-clonado
  git submodule update --init

  # Ou:
  cd ..
  git clone --recursive projeto projeto-clonado

4.8 - Social coding (gitlab, github, etc)
-----------------------------------------

4.9 - Github: criando e forkando um projeto
-------------------------------------------

4.10 - Github: fazendo um pull request
--------------------------------------

4.11 - Github: sistema de tickets
---------------------------------

4.12 - Atividades
-----------------

#. Instale o git.
#. Crie uma conta do `Github <https://github.com>`_ ou no `Gitlab <https://gitlab.com>`_.
#. Faça um pequeno site com o Skeleton.
#. Bônus: git log to ChangeLog!

Referências
-----------

* `cheatsheet do git-flow <https://danielkummer.github.io/git-flow-cheatsheet/index.pt_BR.html>`_.
* `Skeleton: Responsive CSS Boilerplate <http://getskeleton.com/>`_
* `Versionamento Semântico 2.0.0 <http://semver.org/lang/pt-BR/>`_.
* `Curso Básico de Git - RBtech <https://www.youtube.com/watch?v=WVLhm1AMeYE&list=PLInBAd9OZCzzHBJjLFZzRl6DgUmOeG3H0>`_.
* `Instalando Git <https://git-scm.com/book/pt-br/v1/Primeiros-passos-Instalando-Git>`_.
* `git-cola: The highly caffeinated Git GUI <https://git-cola.github.io/>`_