bzr pull vs bzr merge - PullRequest
       14

bzr pull vs bzr merge

17 голосов
/ 11 января 2010

Я использую bzr для очень простой задачи: получить версию GNU Emacs для разработки. После первоначального bzr branch я бы хотел обновлять свою локальную версию. Я читал о документации на bzr pull и bzr merge, но не мог понять из этого. Я пробовал bzr merge в течение нескольких дней и обнаружил, что bzr merge часто приводит к неразрешимым конфликтам. Обратите внимание, что я не делал никаких локальных изменений. bzr pull рекомендуемый способ?

РЕДАКТИРОВАТЬ 1 (добавлена ​​схема, украденная у Крис Конвей ):

remote: A --> B --> C --> D
         \                 \
       (branch)           (merge)
           \                  \
local:      \--> A (no change) \--> why conflicts?

Я понимаю git и darcs, но ничего не знаю о bzr. Аналогии с git или darcs очень помогут.

РЕДАКТИРОВАТЬ 2 : update должен работать только с checkout? Выполнение update в branch, похоже, ничего не делает.

Ответы [ 3 ]

35 голосов
/ 12 января 2010

Обратите внимание, что я не делал местных изменения. bzr pull рекомендуется способ

Да, похоже, что bzr pull - подходящая команда для вашего использования. pull берет ветку удаленного источника и копирует любые изменения из нее в локальную ветку назначения в более старой версии. (Я использую «удаленный» и «локальный» здесь для обозначения «источник» и «пункт назначения». Подойдут любые две ветви, даже две локальные ветви.)

remote: A --> B --> C --> D
         \                 \
       (branch)           (pull)
           \                  \
local:      \--> A (no change) \--> D

A pull работает только в том случае, если две ветви не расходятся, т. Е. Если ревизия места назначения является старой ревизией источника. push является только противоположной операцией: она копирует изменения в локальной ветке в удаленную ветку со старой версией.

remote: A      (no change)       --> C
         \                      /
       (branch)             (push)
           \                  /
local:      \--> A --> B --> C

A merge используется, когда вы хотите скопировать изменения в локальную ветвь, которая отличается от удаленной ветки.

remote: A --> B --> C --> D
         \                 \  
       (branch)           (merge) 
           \                  \ 
local:      \--> A --> X --> Y --> Z

Здесь Z включает все изменения с D и изменения с Y. A pull в этом случае невозможен. Обратите внимание, что вы должны commit после merge, чтобы сохранить новую объединенную ревизию, тогда как вытягивание автоматически приводит ветвь к сохраненной точке ревизии.

A checkout позволяет использовать bzr в режиме, аналогичном CVS / SVN: локальная ветвь будет «присоединена» к удаленной ветке; commit s будет автоматически push ed; если удаленная ветвь разошлась, фиксация завершится неудачей; update - это просто merge из «прикрепленной» удаленной ветви.

4 голосов
/ 12 января 2010

Объединение для объединения двух разных веток, а не копий (локальной и удаленной). Используйте тягу.

1 голос
/ 21 ноября 2011

$ bzr help pull

Цель: превратить эту ветвь в зеркало другой ветки.

- перезаписать Игнорировать различия между ветвями и перезаписать безоговорочно.

Если вы хотите заменить свои локальные изменения и просто хотите, чтобы ваша ветка чтобы соответствовать удаленному, используйте pull --overwrite. Это будет работать даже если две ветви разошлись.

так что вы можете использовать:

$ bzr pull --overwrite

...