Использование стека веток¶
Что такое ветка в стеке?¶
Ветка в стеке - это ветка которая знает как найти ревизии в другой ветке. Ветка в стеке хранит только уникальные ревизии, которые при этом быстрее создавать и они более эффективны по занимаемому месту. По этим показателям стек веток похож на разделяемые репозитории. Конечно стек веток имеет дополнительные преимущества:
- Новая ветка может быть в абсолютно другом месте по сравнению с веткой на которой она основана как стек.
- Удаление ветки в стеке на самом деле удаляет ревизии (а не оставляет их в разделяемом репозитории).
- Стек веток более безопасен чем разделяемые репозитории, т.к. репозиторий на котором основан стек может иметь доступ только для чтения для разработчиков которые фиксируют изменения на ветке в стеке.
Эти преимущества делают стек веток идеальным выбором для различных сценариев, включая экспериментальные ветки и сайты с хостингом кода.
Создание ветки в стеке¶
Что бы создать ветку в стеке нужно использовать опцию stacked
для команды
branch
. Например:
bzr branch --stacked source-url my-dir
Здесь мы создадим my-dir
как ветку в стеке без локальных ревизий. Если
определено открытая ветка связанная с source-url
будет использована как
основа стека. Иначе source-url
будет основой стека.
Создание рабочего каталога в стеке¶
Поддержка прямого создания рабочего каталога в стеке скоро ожидается. Пока для этого требуется два шага:
- Создать ветку в стеке, как описано выше.
- Конвертировать ветку в рабочий каталог используя либо команду
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
Ограничения веток в стеке¶
Важная вещь которую надо запомнить в отношении веток в стеке - ветка на которой основан стек должна быть доступна практически для всех операций. Конечно это не проблема если обе ветки локальные, или находятся на одном сервере.