Объединить две кассы на базаре

Я только начинаю работать с базаром и обнаружил, что функция оформления заказа является наиболее полезной для того, как я работаю, а именно: я могу перейти с «мастер-копии», выполнить некоторую разработку, а затем зафиксировать свои изменения в новый каталог. Затем это обновляет «главную копию».

Но что, если я работаю (например) над двумя проектами, изменяя разные части кода? Сказать:

~/master                - master copy
bzr co master ./gui
bzr co master ./engine

Так что я делаю вещи, связанные с графическим интерфейсом, в каталоге ./gui и внутреннюю работу в ./engine. Как мне зафиксировать свои изменения? Если я сначала фиксирую графический интерфейс, а затем движок, я думаю, любые конфликты будут отмечены в движке?

Есть ли способ объединить графический интерфейс и движок, а затем сделать только одну фиксацию в главной копии?

Чтобы немного усложнить ситуацию, как насчет того, чтобы я сделал это:

bzr branch gui ./mouse

Сейчас я, возможно, работал над мышью, но еще и над графическим интерфейсом. Если я хочу объединить код из графического интерфейса и мыши, а затем передать его в мастеринг, как лучше всего с этим справиться? Или действительно, если я также:

bzr branch gui ./keyboard

Если я изменил измененный графический интерфейс, клавиатуру и мышь, следует ли мне иерархически объединить - т.е. мышь + клавиатура, затем объединить это с графическим интерфейсом, а затем передать графический интерфейс в мастер?

Надеюсь, понятно, чего я пытаюсь достичь! Спасибо заранее за ваше время.


person Dave    schedule 25.07.2009    source источник


Ответы (2)


Если у вас есть две проверки, каждый раз, когда вы фиксируете изменения в одной, вам сначала нужно будет извлечь любые изменения из другой, потенциально имея необходимость разрешать конфликты на каждом шаге. Как правило, это хорошая идея, поскольку со временем легче разрешать конфликты и следить за тем, чтобы ваш код не слишком расходился.

Однако похоже, что вы хотите, чтобы над графическим интерфейсом и движком работали отдельные разработчики, или вы просто хотите сохранить разрешение конфликтов до завершения разработки в обеих ветвях. В этом случае вам, вероятно, следует создать их как независимые ветки с помощью bzr branch. Каждая ветка может использовать локальные коммиты и не беспокоиться о конфликтах друг с другом. Затем, когда придет время объединить, вы можете сделать это одним из трех способов, каждый из которых даст одинаковый конечный результат:

1. Слейте одну ветку с другой, затем подтолкните ее к мастеру:

cd gui
bzr merge ../engine
# manually fix any conflicts
bzr commit
bzr push #back up to main

Обратной стороной вышеупомянутого метода является то, что теперь в вашей ветке gui есть изменения движка. Это нормально, если вы собираетесь выбросить обе ветви, когда они возвращаются в основную ветку. Но если вы хотите, чтобы ветки оставались дольше, вы можете:

2. Слить с основной веткой:

cd master
bzr merge ../gui
bzr commit
bzr merge ../engine
# manually fix conflicts
bzr commit

Плюс в этом заключается в том, что у вас по-прежнему есть графический интерфейс и движок как отдельные ветки, но вам нужно было закрепить одну для освоения, прежде чем вы были уверены, что они оба будут работать вместе. Итак, вы действительно, вероятно, захотите:

3. Создайте ветку слияния:

bzr branch ~/master gui-engine-merge
cd gui-engine-merge
bzr merge ../gui
bzr commit
bzr merge ../engine
# manually fix conflicts
bzr commit
bzr push ~/master
# since this branch was only for merging, you don't need it anymore:
cd ..
rm -r gui-engine-merge
person Cody Casterline    schedule 20.08.2009
comment
Хм, очевидно, StackOverflow странным образом форматирует код bash, хотя я поставил перед ним четыре пробела. (!?) - person Cody Casterline; 20.08.2009
comment
Очевидно, блоки кода нельзя включать в списки. Я отредактировал ваше сообщение, чтобы использовать пронумерованные вручную заголовки, и теперь он выглядит нормально. - person John Millikin; 20.08.2009
comment
Да, я просто пошел и прочитал руководство по форматированию. Кажется реально глупо, что если я попытаюсь пронумеровать свой собственный список простым текстом, он изменится на ‹ol›, что испортит другое форматирование. ›.‹ - person Cody Casterline; 20.08.2009
comment
Я обошел это, сделав свои элементы списка заголовками. - person Cody Casterline; 20.08.2009

Да, bzr не должен позволять вам проверять изменения из репозитория движка, если он обнаруживает конфликты. Обычно вы сначала делаете "bzr up" незадолго до регистрации, а затем убеждаетесь, что ваши вещи нравятся другим.

Что касается второй части вашего вопроса, касающейся ветвей мыши / клавиатуры, я обычно это делаю так. Просто перейдите в каталог gui, а затем выполните:

bzr merge ../mouse

После объединения изменений вы можете выполнить фиксацию из каталога gui, и он отправит набор изменений в «главный» каталог.

Обратите внимание, что я вряд ли эксперт по bzr, но именно так я имел дело с репозиториями SVN.

person oggy    schedule 25.07.2009