9. Злиття — оновлення з Debian та апстріму¶
Злиття — це одна з найсильніших сторін Bazaar, й ми часто виконуємо його у процесі розробки Ubuntu. Злиття може бути виконано з оновленнями з Debian, з нового випуску у апстрімі й від інших розробників Ubuntu. Зробити це в Bazaar дуже просто, усе засновано на команді bzr merge
[1].
Знаходячись у робочому каталозі будь-якої гілки, Ви можете виконати злиття змін з гілки у іншому місці. Спочатку перевірте, що в Вас немає незафіксованих змін:
$ bzr status
Якщо з’явиться звіт, то Вам потрібно або застосувати зміни, зробити відкат, або відкласти вирішення (й повернутися до їх вирішення пізніше).
9.1. Злиття з Debian¶
Потім запустіть bzr merge
, передаючи URL гілки для злиття. Наприклад, щоб виконати злиття версій пакунку в Debian Unstable запустіть [2]:
$ bzr merge lp:debian/tomboy
Це додасть зміни, внесені з миті останнього злиття й дасть Вам усі зміни для огляду. Це може потягнути конфлікти. Ви можете побачити усі дії, виконані командою merge
, запустивши:
$ bzr status
$ bzr diff
Якщо з’явиться звіт про конфлікти, Вам потрібно відредагувати відповідні файли, щоб привести їх до потрібного вигляду, прибравши конфліктуючі маркери (conflict markers). Як тільки Ви це зробите, виконайте:
$ bzr resolve
$ bzr conflicts
Це вирішить проблему з конфліктуючими файлами, які Ви виправляли, й повідомить що ще Вам потрібно зробити.
Після того, як усі конфлікти вирішено, й Ви внесли усі інші необхідні зміни, потрібно додати новий запис у changelog й виконати фіксацію:
$ dch -i
$ bzr commit
як був опис вище.
Втім перед фіксацією завжди бажано перевірити усі зміни, зроблені в Ubuntu, виконавши:
$ bzr diff -r tag:0.6.10-5
Ця команда покаже відмінності між версіями в Debian (0.6.10-5) і Ubuntu (0.6.10-5ubuntu1). Подібно Ви можете виконати порівняння з будь-якими іншими версіями. Щоб побачити усі доступні версії, виконайте:
$ bzr tags
Після перевірки та фіксації злиття, Вам потрібно знайти поручителя або вивантажити пакунок у архів у звичний спосіб.
Якщо Ви збираєтеся створити джерельний пакунок з цієї об’єднаної гілки, то потрібно використовувати опцію -S
команди bd
. Також Вам закортить розглянути використання опції --package-merge
. Це додасть відповідні опції -v
і -sa
до джерельного пакунку, щоб усі записи у лозі змін після останніх змін в Ubuntu були включені у Ваш файл _source.changes
. Наприклад:
$ bzr builddeb -S --package-merge
9.2. Злиття з новою версією з апстріму¶
Коли в апстрімі випускається нова версія (або Ви бажаєте запакувати зняток), Вам потрібно виконати злиття tar-архіву й Вашої гілки.
Це робиться командою bzr merge-upstream
. Якщо у Вашому пакунку є файл debian/watch
з правильним вмістом, то з каталогу гілки, у яку Ви збираєтеся злити зміни, просто наберіть:
$ bzr merge-upstream
Команда завантажить тарбол й зіллє його у Вашу гілку, автоматично додавши запис в debian/changelog
. bzr-builddeb
продивляється файл debian/watch
, щоб визначити місцезнаходження тарболу з апстріму.
Якщо в Вас відсутній файл debian/watch
, то Вам потрібно вручну вказати місцезнаходження тарболу з апстріму й версію:
$ bzr merge-upstream --version 1.2 http://example.org/releases/foo-1.2.tar.gz
Опція --version
використовується для вказування версії апстріму, з якої виконується злиття, оскільки команда не здатна (поки) дізнатися її самостійно.
Останній параметр — це місцезнаходження тарболу, на який виконується оновлення: це може бути шлях у локальній файловій системі, http, ftp, sftp або інша URI, як показано у прикладі. Команда автоматично завантажить тарбол для Вас, перейменує його відповідним чином й, якщо потрібно, перетворить у .gz
.
Команда merge-upstream
повідомить або про своє вдале завершення, або про те, що є конфлікти. У будь-якому випадку в Вас буде можливість перевірити зміни перед їх фіксацією у звичний спосіб.
Якщо Ви об’єднуєте реліз апстріму з існуючою гілкою Bazaar, у якій ще не використовуалася розмітка UDD, bzr merge-upstream
пройде невдало й з помилкою, що тег попередніх версій апстріму недоступний. Злиття неможна виконати без знання базової версії для злиття. Для роботи з цим, створіть тег у своєму існуючому репозиторії для останньої версії апстріму що там є; наприклад, якщо останній реліз Ubuntu був 1.1-0ubuntu3, створіть тег upstream-1.1, вказуючи на зміну bzr, яку Ви бажаєте використовувати як підказку для гілки апстріму.
[1] | Для роботи з командою merge Вам знадобляться новіші версії bzr та bzr-builddeb . Використовуйте версії з Ubuntu 12.04 (Precise) або розроблювані версії з PPA bzr . Точніше кажучи, Вам знадобиться bzr версії 2.5 beta 5 або новішої, а також bzr-builddeb версії 2.8.1 або новішої. Для старих версій використовуйте назамін команду bzr merge-package . |
[2] | Щоб перевірити наявність інших гілок пакунку в Debian, див. сторінку коду пакунку. Наприклад: https://code.launchpad.net/debian/+source/tomboy |