Базар: слияние пузырьков в магистрали после выгрузки слияния фиксации


Я новичок в Bazaar, пришел к нему из-за подрывной деятельности и 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. Никаких конфликтов обнаружено не было, но три файла были оставлены как измененные в моей локальной ветке. Я проверил и зафиксировал их с комментарием, который был доложен мне как commit 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, что делает его похожим на то, что я его переписал.) Каков наилучший рабочий процесс в этой ситуации, чтобы избежать этих пузырей? Я должен был потянуть первым? Я остерегаюсь слияния чужого кода с моими локальными незафиксированными изменениями.

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

1 2

1 ответ:

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

// 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