Bzr pull vs bzr merge

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

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

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

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

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

Ответы

Ответ 1

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

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

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, чтобы сохранить новую объединенную ревизию, тогда как pull автоматически приносит ветку в сохраненную точку ревизии.

A checkout позволяет вам использовать bzr в режиме, аналогичном CVS/SVN: локальная ветвь будет "прикреплена" к удаленной ветке; commit будет автоматически push ed; если удаленная ветвь расходится, коммит будет терпеть неудачу; a update является просто a merge из "прикрепленной" удаленной ветки.

Ответ 2

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

Ответ 3

$bzr help pull

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

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

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

чтобы вы могли использовать:

$bzr pull --overwrite