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
|
.. _using-stacked-branches:
Использование стека веток
=========================
Что такое ветка в стеке?
------------------------
Ветка в стеке - это ветка которая знает как найти ревизии в другой ветке. Ветка
в стеке хранит только уникальные ревизии, которые при этом быстрее создавать и
они более эффективны по занимаемому месту. По этим показателям стек веток похож
на разделяемые репозитории. Конечно стек веток имеет дополнительные
преимущества:
* Новая ветка может быть в абсолютно другом месте по сравнению с веткой на
которой она основана как стек.
* Удаление ветки в стеке на самом деле удаляет ревизии (а не оставляет их в
разделяемом репозитории).
* Стек веток более безопасен чем разделяемые репозитории, т.к. репозиторий на
котором основан стек может иметь доступ только для чтения для разработчиков
которые фиксируют изменения на ветке в стеке.
Эти преимущества делают стек веток идеальным выбором для различных сценариев,
включая экспериментальные ветки и сайты с хостингом кода.
Создание ветки в стеке
----------------------
Что бы создать ветку в стеке нужно использовать опцию ``stacked`` для команды
``branch``. Например::
bzr branch --stacked source-url my-dir
Здесь мы создадим ``my-dir`` как ветку в стеке без локальных ревизий. Если
определено открытая ветка связанная с ``source-url`` будет использована как
*основа стека*. Иначе ``source-url`` будет *основой стека*.
Создание рабочего каталога в стеке
-----------------------------------
Поддержка прямого создания рабочего каталога в стеке скоро ожидается. Пока
для этого требуется два шага:
1. Создать ветку в стеке, как описано выше.
2. Конвертировать ветку в рабочий каталог используя либо команду
``reconfigure``, либо команду ``bind``.
Публикация ветки в стеке
------------------------
Многие изменения в большинстве проектов создаются на основе готовых веток,
таких как *основная линия разработки*, или *текущая стабильная*. Создание новой
ветки в стеке основанной на таких ветках легко сделать с использованием команды
``push``::
bzr push --stacked-on reference-url my-url
Эта команда создаст новую ветку ``my-url``, которая будет основана на
``reference-url`` и содержать только ревизии из текущей ветки, которых еще нет
на ветке ``reference-url``.
Если локальная ветка была создана как ветка в стеке то мы можем использовать
опцию ``--stacked`` для команды ``push`` и тогда ветка на которой будет основан
стек будет задана неявно. Например::
bzr branch --stacked source-url my-dir
cd my-dir
(меняем, меняем, меняем)
bzr commit -m "исправление ошибки"
bzr push --stacked
Ограничения веток в стеке
-------------------------
Важная вещь которую надо запомнить в отношении веток в стеке - ветка на которой
основан стек должна быть доступна практически для всех операций. Конечно это не
проблема если обе ветки локальные, или находятся на одном сервере.
|