~bzr-pqm/bzr/bzr.dev

3638.6.26 by Dmitry Vasiliev
Added translation for centralized_workflow.txt
1
===============================
2
Работа в централизованном стиле
3
===============================
4
5
.. sectnum::
6
7
8
Обзор
9
=====
10
11
Этот документ описывает один из возможных подходов к использованию
12
Bazaar_. А именно, использование распределенной системы контроля версий
13
Bazaar_, в централизованном стиле. Bazaar_ разработана, что бы быть гибкой
14
и допускать различные подходы к работе, начиная от полностью
15
децентрализованного, до практически централизованного. Подход описанный
16
здесь позволяет новым пользователям проще вникнуть в более продвинутое
17
использование Bazaar_ и смешивать централизованные и децентрализованные
18
операции.
19
20
В общем случае, данный документ интересен для пользователей переходящих с
21
централизованных систем, таких как CVS, или Subversion. В таких системах
22
обычно есть единственный центральный сервер на котором хранится код
23
проекта и участники команды работают над этим кодом, синхронизируя свою
24
работу. Такой режим так же подходит для разработчика-одиночки,
25
работающего на нескольких различных машинах.
26
27
.. _Bazaar: http://bazaar-vcs.org
28
29
.. contents::
30
        Содержание
31
32
33
Начальные установки
34
===================
35
36
В самом начале, для более удобной работы с Bazaar_, желательно осуществить
37
достаточно простые шаги по настройке.
38
39
40
Настройка e-mail пользователя
41
-----------------------------
42
43
Строка идентифицирующая пользователя сохраняется при каждой фиксации. Хотя
44
она не обязательно должна быть аккуратной или уникальной она будет
45
использоваться в сообщениях журнала и аннотациях, таким образом лучше что
46
бы она была похожа на что-то реальное.
47
48
::  
49
50
   % bzr whoami "Иван Пупкин <ivan@pupkin.ru>"
51
52
53
Настройка локального репозитория
54
--------------------------------
55
56
В общем случае ветки Bazaar_ копируют полную историю изменений вместе с
57
собой, что, кстати, позволяет работать в полностью децентрализованном
58
стиле. Как оптимизация для связанных веток возможно объединять их
59
хранилища таким образом, что отпадает необходимость в копировании полной
60
истории изменений при создании новой ветки.
61
62
Лучший способ сделать это - создать `Разделяемый репозиторий`_. В общем
3638.6.38 by Alexey Shtokalo
* изменен способ рисования плашек в карточке быстрого доступа с целью улучшить
63
случае, ветки будут разделять хранилище если они находятся в подкаталоге
64
этого репозитория. Давайте создадим `Разделяемый репозиторий`_ в нашем
65
домашнем каталоге и таким образом все ветки которые мы будем создавать
3638.6.26 by Dmitry Vasiliev
Added translation for centralized_workflow.txt
66
под ним будут разделять хранилище истории.
67
68
::
69
70
  % bzr init-repo --trees ~
71
72
73
Настройка удаленного репозитория
74
--------------------------------
75
76
Во многих случаях нужно создавать место где данные хранятся отдельно от
3638.6.38 by Alexey Shtokalo
* изменен способ рисования плашек в карточке быстрого доступа с целью улучшить
77
рабочего каталога. Такой подход необходим для централизованных систем
78
(CVS/SVN). Обычно эти каталоги находятся на различных машинах, хотя и не
3638.6.26 by Dmitry Vasiliev
Added translation for centralized_workflow.txt
79
всегда. На самом деле это достаточно хороший подход, особенно в рабочей
80
среде. Так как здесь существует центральная точка, где могут быть сохранены
81
все данные и даже если что-то случится с машиной разработчика
82
зафиксированная работа не будет потеряна.
83
84
Давайте создадим разделяемое место для нашего проекта на удаленной машине
85
и назовем его ``centralhost``. Мы снова используем `Разделяемый
86
репозиторий`_ для оптимизации использования дисков.
87
88
::
89
90
  % bzr init-repo --no-trees sftp://centralhost/srv/bzr/
91
92
Можно рассматривать этот шаг как похожий на установку CVSROOT, или
93
репозитория Subversion. Опция {{{--no-trees}}} указывает Bazaar не
3638.6.38 by Alexey Shtokalo
* изменен способ рисования плашек в карточке быстрого доступа с целью улучшить
94
создавать рабочий каталог в репозитории. Нам это подходит, т.к. никто
3638.6.26 by Dmitry Vasiliev
Added translation for centralized_workflow.txt
95
не будет напрямую что-то изменять на ветках в центральном репозитории.
96
97
98
Миграция рабочего проекта в Bazaar
99
==================================
100
101
Теперь, когда у нас есть репозиторий давайте создадим проект под контролем
102
версий. В большинстве случаев у вас уже есть какой-то код с которым вы
103
работаете и для хранения которого вы хотели бы использовать Bazaar_. Если
104
код изначально уже был под контролем версий существует много способов
105
конвертировать проект в Bazaar_ без потери истории изменений. Но эти
106
способы находятся вне тем рассматриваемых в данном документе. Смотрите
107
`Отслеживание изменений на основной ветке`_ для некоторых способов (секция
108
"Конвертирование и сохранение истории").
109
110
.. _Отслеживание изменений на основной ветке: http://bazaar-vcs.org/TrackingUpstream
111
112
.. 
113
   TODO: На самом деле нам нужен другой документ для описания
114
   конвертирования проекта. Но пока ссылка выше - это лучшее.
115
116
117
Разработчик 1: Создание первой ревизии
118
--------------------------------------
119
120
Сначала нам нужно создать ветку в нашем удаленном репозитории, там где мы
121
хотели бы хранить наш проект. Допустим, что у нас уже есть проект "sigil",
122
который мы хотели бы хранить под контролем версий.
123
124
::
125
126
  % bzr init sftp://centralhost/srv/bzr/sigil
127
128
Это можно рассматривать как ветку "HEAD" в терминах CVS, или как "trunk" в
129
терминах Subversion. Назовем это веткой разработки ``dev``.
130
3638.6.38 by Alexey Shtokalo
* изменен способ рисования плашек в карточке быстрого доступа с целью улучшить
131
Я предпочитаю работать в подкаталоге моего домашнего каталога, что бы
3638.6.26 by Dmitry Vasiliev
Added translation for centralized_workflow.txt
132
избегать коллизий со всеми другими файлами которые в ней находятся. Также
3638.6.38 by Alexey Shtokalo
* изменен способ рисования плашек в карточке быстрого доступа с целью улучшить
133
нам понадобится каталог для проекта где мы сможем хранить различные ветки
3638.6.26 by Dmitry Vasiliev
Added translation for centralized_workflow.txt
134
проекта над которыми работаем.
135
136
::
137
138
  % cd ~
139
  % mkdir work
140
  % cd work
141
  % mkdir sigil
142
  % cd sigil
143
  % bzr checkout sftp://centralhost/srv/bzr/sigil dev
144
  % cd dev
145
  % cp -ar ~/sigil/* .
146
  % bzr add
147
  % bzr commit -m "Первый импорт Sigil"
148
149
Выше мы создали пустую ветку ``/sigil`` на ``centralhost`` и затем
150
загрузили эту пустую ветку на нашу рабочую машину что бы добавить файлы из
3638.6.38 by Alexey Shtokalo
* изменен способ рисования плашек в карточке быстрого доступа с целью улучшить
151
нашего старого проекта. Есть много способов настроить свой рабочий
152
каталог, но шаги выше упрощают дальнейшую работу с ветками для работы
3638.6.26 by Dmitry Vasiliev
Added translation for centralized_workflow.txt
153
над ошибками, или новыми функциями. И одна из наиболее сильных сторон
154
Bazaar_ - это именно отличная работа с ветками.
155
156
На этом этапе, т.к. мы создали рабочую копию (checkout) удаленной ветки,
157
все фиксации которые будут сделаны в ``~/work/sigil/dev/`` будут
158
автоматически сохранены и локально и на ``centralhost``.
159
160
161
Разработчик N: Получение рабочей копии проекта
162
----------------------------------------------
163
164
Так как первый разработчик проделал всю работу по созданию проекта все
165
остальные разработчики могут просто получить рабочую копию ветки. Хотя
166
**они все еще должны следовать** разделам `Настройка e-mail пользователя`_ и
167
`Настройка локального репозитория`_.
168
169
Получим рабочую копию текущего дерева разработки::
170
171
  % cd ~/work/sigil
172
  % bzr checkout sftp://centralhost/srv/bzr/sigil dev
173
174
Теперь, когда два человека имею рабочую копию
175
``sftp://centralhost/srv/bzr/sigil`` будут ситуации когда одна из копий
176
будет не синхронизирована с текущей версией. Во время фиксации Bazaar_
177
проинформирует пользователя об этом и не допустит фиксации. Для получения
178
последних изменений нужно использовать ``bzr update``. Эта команда может
179
потребовать разрешения конфликтов если были изменены одни и те же файлы.
180
181
182
Разработка на отдельных ветках
183
==============================
184
185
До этого момента все работали и фиксировали изменения на одну и ту же
186
ветку. Это значит, что каждый должен периодически обновлять свою ветку и
187
иметь дело с изменениями других разработчиков. Так же если один
188
разработчик фиксирует что-то, что приводит к ошибкам, то после
189
синхронизации эта проблема коснется каждого.
190
191
Обычно лучше вести разработку на различных ветках и затем, как только
192
изменения достаточно стабильны, интегрировать их обратно на основную
193
ветку. Это одно из наибольших изменений по сравнению с работой в CVS/SVN.
194
Обе эти системы позволяют работать с отдельными ветками, но их алгоритмы
195
объединения достаточно слабы и поэтому с ними сложно держать все
196
синхронизировано. Bazaar_ отслеживает что уже было объединено и может даже
197
прикладывать изменения к файлам которые были переименованы.
198
199
200
Создание и работа на новой ветке
201
--------------------------------
202
203
Мы бы хотели, что бы наши изменения были доступны другим даже если они
204
пока еще не закончены. Таким образом мы создадим новую публичную ветку на
205
``centralhost`` и будем отслеживать ее локально.
206
207
::
208
209
  % cd ~/work/sigil
210
  % bzr branch sftp://centralhost/srv/bzr/sigil \
211
               sftp://centralhost/srv/bzr/sigil/doodle-fixes
212
  % bzr checkout sftp://centralhost/srv/bzr/sigil/doodle-fixes doodle-fixes
213
  % cd doodle-fixes
214
215
Теперь у нас есть место где мы можем исправлять все ошибки для ``doodle``.
216
И мы не будем прерывать никого кто работает над другими частями кода. Так
217
как у нас есть рабочая копия (checkout) все фиксации которые мы делаем на
218
``~/work/sigil/doodle-fixes/`` так же появятся и на ``centralhost``.
219
[#nestedbranches]_ Также возможно, что бы два разработчика совместно
220
работали над одной из этих веток, так же как они совместно работают над
221
веткой ``dev``. [#cbranch]_
222
3638.6.38 by Alexey Shtokalo
* изменен способ рисования плашек в карточке быстрого доступа с целью улучшить
223
.. [#nestedbranches] Может показаться странным иметь ветку в подкаталоге
3638.6.26 by Dmitry Vasiliev
Added translation for centralized_workflow.txt
224
   другой ветки. Но это нормально, можно думать об этом как о
225
   иерархическом пространстве имен где вложенная ветка является
226
   производной от внешней ветки.
227
228
.. [#cbranch] Когда используется множество независимых веток каждый раз
229
   набирать полный URL занимает много времени. Мы рассматриваем различные
230
   методы, что бы обойти это, например псевдонимы для веток и т.п. Но пока
231
   плагин bzrtools_ предоставляет команду ``bzr cbranch``. Эта команда на
232
   основе базовой ветки создает новую публичную ветку и рабочую копию этой
233
   ветки всего одной командой. Конфигурирование ``cbranch`` не входит в
234
   рамки описания этого документа, но финальная команда выглядит следующим
235
   образом:
236
237
   ::
238
239
   % bzr cbranch dev my-feature-branch
240
241
.. _bzrtools: http://bazaar-vcs.org/BzrTools
242
243
244
Объединение изменений обратно
245
-----------------------------
246
247
Когда решено что некоторые изменения из ``doodle-fixes`` готовы для
248
объединения на основную ветку нужно просто сделать следующее::
249
250
  % cd ~/work/sigil/dev
251
  % bzr merge ../doodle-fixes
252
253
Теперь изменения доступны на ветке ``dev``, но они пока еще не были
254
зафиксированы. В этот момент нужно просмотреть финальные изменения и
255
проверить, что код компилируется и проходят все тесты. Команды ``bzr
256
status`` и ``bzr diff`` хорошие инструменты для этого. Так же нужно
257
разрешить возможные конфликты. Bazaar_ не допустит фиксации пока не будут
258
разрешены все конфликты. В этом случае вы случайно не зафиксируете маркеры
259
конфликта. Команда ``bzr status`` покажет конфликты и изменения, или можно
260
использовать ``bzr conflicts`` что бы увидеть только конфликты.
261
Используйте ``bzr resolve file/name``, или ``bzr resolve --all`` как
262
только конфликты были разрешены. [#resolve]_ Если существуют конфликты
263
которые особенно сложно разрешить можно использовать команду ``bzr
264
remerge``. Эта команда позволит использовать другие алгоритмы объединения
265
и также позволит увидеть строки оригинального кода (``--show-base``).
266
267
.. [#resolve] Некоторые системы позволяют разрешать конфликты как часть
268
   процесса объединения. Мы обнаружили, что обычно проще разрешать
269
   конфликты когда можно просматривать полное дерево, а не только
270
   отдельные файлы. Это дает намного больше контекста и также позволяет
271
   запускать тесты когда проблема будет решена.
272
273
274
Рекомендации по созданию веток
275
------------------------------
276
277
Один из часто используемых способов работы с набором веток - это дать
278
каждому разработчику свою собственную ветку и собственное место для работы
279
на центральном сервере. Это можно сделать так::
280
281
  % bzr branch sftp://centralhost/srv/bzr/sigil \
282
               sftp://centralhost/srv/bzr/sigil/user-a
283
  % bzr branch sftp://centralhost/srv/bzr/sigil \
284
               sftp://centralhost/srv/bzr/sigil/user-b
285
286
Это дает каждому разработчику собственную ветку для работы. И они смогут
287
легко создать новые ветки с помощью [#cbranch]_
288
::
289
290
  % bzr branch sftp://centralhost/srv/bzr/sigil/user-a \
291
               sftp://centralhost/srv/bzr/sigil/user-a/feature 
292
  % cd ~/work/sigil
293
  % bzr checkout sftp://centralhost/srv/bzr/sigil/user-a/feature myfeature
294
295
296
Глоссарий
297
=========
298
299
Разделяемый репозиторий
300
-----------------------
301
302
Bazaar_ поддерживает концепцию "Разделяемый репозиторий". Эта концепция
303
похожа на традиционные концепции репозиториев в других системах контроля
304
версий, таких как CVS, или Subversion. Например, в Subversion у вас есть
305
удаленный репозиторий, где хранится вся история и локально история не
306
хранится, а хранится только рабочая копия файлов. Конечно "Разделяемый" в
307
данном контексте значит, что он разделен между ветками. Он *может* быть
308
разделен между людьми, но отдельные ветки также могут быть разделены между
309
людьми.
310
311
В Bazaar_ термин "Разделяемый репозиторий" - это место где несколько веток
312
могут *разделять* их историю ревизий. Что бы поддерживать
313
децентрализованную схему работы каждая ветка может хранить свою
314
собственную историю ревизий. Но часто это не эффективно, т.к. зависимые
315
ветки разделяют историю и они могут так же разделять и хранилище истории.
316
317
318
.. 
319
   vim: tw=74 ft=rst spell spelllang=en_us