.. _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 Ограничения веток в стеке ------------------------- Важная вещь которую надо запомнить в отношении веток в стеке - ветка на которой основан стек должна быть доступна практически для всех операций. Конечно это не проблема если обе ветки локальные, или находятся на одном сервере.