aboutsummaryrefslogtreecommitdiff
path: root/aulas/versionamento.rst
blob: a2324a1c11011be158e3240b2d4d4329185fa274 (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
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:

::

  cd ~/projetos/blogatico
  git config --global user.name  "Seu Nome"
  git config --global user.email "seu@email"

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:

::

    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:

::

    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:

::

    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:

::

    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
    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.

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/>`_