aboutsummaryrefslogtreecommitdiff
path: root/aulas/versionamento.rst
blob: 76d32bf36bddd4186d5966816b5c64429aee3973 (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
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
4. Controle de versão e social coding
=====================================

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

* 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).
* Ajuda, mas não resolve conflitos na edição de arquivos.
* Boa prática: versionando desde o dia 0.

Imagens:

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

4.2 - Sistemas de controle de versão
------------------------------------

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:

* Centralizadaso:

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

* Distribuídos:

  * 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 e configurando
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* Focaremos em git pela linha de comando.
* Disponível em tudo que é tipo de sistema operacional.
* A única exigência é especificar um nome e email (de preferência funcional ;) para 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.4 - Trabalhando no projeto
----------------------------

4.4 - 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
  git status
  git add README.mdwn
  git status
  gedit README.mdwn
  git status
  git diff
  git commit -m "Primeira revisão"
  git add README.mdwn # mudanças recentes adicionadas ao estágio de lançamento
  git commit -m "Segunda revisão"
  git add .
  git commit -m "Adiciona demais arquivos" # coloca todas as mudanças no estágio e comete

Imagens:

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

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
  sudo apt-get install gitk
  gitk

Imagens:

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

4.4 - Interface gráfica
~~~~~~~~~~~~~~~~~~~~~~~

Roteiro do screencast:

::

  sudo apt-get install git-cola
  git cola

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 -a
  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
  git commit -a
  git flow feature finish

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

* Um repositório git dentro de outro.
* "Trava" o submódulo em revisões específicas.
* "Sistema" de gestão de dependências de código 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 blogatico blogatico-clonado
  cd blogatico-clonado
  git submodule update --init

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

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

4.8 - Repositórios públicos
~~~~~~~~~~~~~~~~~~~~~~~~~~~

* O git e outros sistemas similares foi feito para facilitar o compartilhamento de código e o desenvolvimento colaborativo.
* Isso é feito através da disponibilização pública dos repositórios, que podem ser clonados ou terem seu conteúdo copiado para outros repositórios.

Roteiro do screencast:

::

  git pull origin master

Imagens:

* Ciclo de desenvolvimento colaborativo.

4.8 - Redes sociais de código
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* Existem serviços que facilitam a criação de repositórios e a interação entre desenvolvedores(as).
* Exemplos: BitBucket, Github, Gitlab.

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

Nesta aula será apresentado o Github e será mostrado como criar e forkar um projeto.

Roteiro do screencast:

* Criação de um repositório para o "blogatico".
* Forkando o projeto "boaspraticas".

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

Roteiro do screencast:

* Fazendo um pull request no repositório do "blogatico".

4.11 - Atividades
-----------------

#. Transforme o seu projeto num repositório git.
#. Crie uma conta do `Github <https://github.com>`_ ou no `Gitlab <https://gitlab.com>`_.
#. Bônus: git log to ChangeLog!
#. Faça um fork do blogático e implemente alguma funcionalidade. Sugestões no arquivo `TODO` do projeto. Gostou das suas mudanças? Por que não fazer um pull request? :D

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

* `Instalando Git <https://git-scm.com/book/pt-br/v1/Primeiros-passos-Instalando-Git>`_.
* `Curso Básico de Git - RBtech <https://www.youtube.com/watch?v=WVLhm1AMeYE&list=PLInBAd9OZCzzHBJjLFZzRl6DgUmOeG3H0>`_.
* `cheatsheet do git-flow <https://danielkummer.github.io/git-flow-cheatsheet/index.pt_BR.html>`_.
* `Skeleton: Responsive CSS Boilerplate <http://getskeleton.com/>`_
* `git-cola: The highly caffeinated Git GUI <https://git-cola.github.io/>`_
* `Sistema de controle de versão – Wikipédia, a enciclopédia livre <https://pt.wikipedia.org/wiki/Sistema_de_controle_de_vers%C3%A3o>`_.