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. Аналогии с мерзавцем или дарксом очень помогут.

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

3 ответа

Решение

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

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

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

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

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

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

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

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

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

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

$ bzr help pull

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

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

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

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

$ bzr pull --overwrite

Другие вопросы по тегам