~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/ru/tutorials/centralized_workflow.txt

  • Committer: Martin von Gagern
  • Date: 2010-04-20 08:47:38 UTC
  • mfrom: (5167 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5195.
  • Revision ID: martin.vgagern@gmx.net-20100420084738-ygymnqmdllzrhpfn
merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
Лучший способ сделать это - создать `Разделяемый репозиторий`_. В общем
 
63
случае, ветки будут разделять хранилище если они находятся в подкаталоге
 
64
этого репозитория. Давайте создадим `Разделяемый репозиторий`_ в нашем
 
65
домашнем каталоге и таким образом все ветки которые мы будем создавать
 
66
под ним будут разделять хранилище истории.
 
67
 
 
68
::
 
69
 
 
70
  % bzr init-repo --trees ~
 
71
 
 
72
 
 
73
Настройка удаленного репозитория
 
74
--------------------------------
 
75
 
 
76
Во многих случаях нужно создавать место где данные хранятся отдельно от
 
77
рабочего каталога. Такой подход необходим для централизованных систем
 
78
(CVS/SVN). Обычно эти каталоги находятся на различных машинах, хотя и не
 
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 не
 
94
создавать рабочий каталог в репозитории. Нам это подходит, т.к. никто
 
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
 
 
131
Я предпочитаю работать в подкаталоге моего домашнего каталога, что бы
 
132
избегать коллизий со всеми другими файлами которые в ней находятся. Также
 
133
нам понадобится каталог для проекта где мы сможем хранить различные ветки
 
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
загрузили эту пустую ветку на нашу рабочую машину что бы добавить файлы из
 
151
нашего старого проекта. Есть много способов настроить свой рабочий
 
152
каталог, но шаги выше упрощают дальнейшую работу с ветками для работы
 
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
 
 
223
.. [#nestedbranches] Может показаться странным иметь ветку в подкаталоге
 
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