Bazaar: объединить пузырь в основной строке после pull - merge - commit - PullRequest
2 голосов
/ 05 декабря 2011

Я новичок в Bazaar, пришедший на него из фона Subversion и git. Я думал, что у меня есть некоторые базовые концепции, но уже наткнулся на камень преткновения в моем первом крупном коммите.

Проект размещен на Launchpad. Я создал локальную ветку («работающую») с bzr branch. Я внес изменения, добавил новые файлы, переименовал другие. Тем временем другой человек в команде совершил и подтолкнул их изменения. На этом этапе история коммитов выглядела примерно так:

3. Team Member A
2. Me (trivial commit of .bzrignore)
1. Original commit

Этим утром я bzr commit меняю свои локальные изменения. Номер коммита был указан как 3, и я предположил, что (ошибочно) будет согласован при синхронизации с сервером. Когда я сделал bzr pull, я получил это сообщение:

Using saved parent location: bzr+ssh://bazaar.launchpad.net/...
bzr: ERROR: These branches have diverged. Use the missing command to see how.
Use the merge command to reconcile them.

Я сделал bzr merge. Конфликтов не было обнаружено, но три файла были оставлены как измененные в моей локальной ветке. Я проверил и передал те с комментарием, который мне сообщили как коммит 4. Затем я сделал bzr push, который не сообщал об ошибках.

Теперь история коммитов (bzr log --include-merges) выглядит следующим образом:

4.    My merge commit
2.1.1 Team Member A
3.    My commit this morning
2.    My .bzrignore commit
1.    Original commit

Здесь очень хочется сохранить сериализацию магистральной линии и избегать этих пузырей слияния. (Досадно, что Launchpad не отображает коммит 2.1.1, поэтому похоже, что я его перезаписал.) Каков наилучший рабочий процесс в этой ситуации, чтобы избежать этих пузырей? Я должен был вытащить первым? Я опасаюсь слияния кода других людей с моими локальными незафиксированными изменениями.

Кроме того, хотя rebase обычно используется в git, похоже, он не одобрен в мире Bazaar. Если бы мы могли избежать использования плагина bzr-rebase, это было бы здорово.

1 Ответ

1 голос
/ 06 декабря 2011

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

// setup the mirror branch
cd <mirror directory>
bzr pull <mainline>

// setup a feature branch
cd <feature directory>
bzr branch <mirror directory> .

// work on your feature branch
bzr commit -m "Did some work"
...
bzr commit -m "Did some more work"

// ready to commit your feature
cd <mirror directory>
bzr pull
bzr merge <feature directory>

// your integration testing is done
bzr commit -m "My shiny feature"
bzr push
...