bzr pull vs bzr merge

17

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

EDIT 1 (добавлена ​​диаграмма, украденная из Криса Конвей ):

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

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

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

    
задан Wei Hu 11.01.2010 в 21:55
источник

3 ответа

35
  

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

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

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 s будет автоматически push ed; если удаленная ветвь расходится, коммит будет терпеть неудачу; update - это всего лишь merge от «прикрепленной» удаленной ветки.

    
ответ дан Chris Conway 12.01.2010 в 06:56
источник
4

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

    
ответ дан myfreeweb 12.01.2010 в 12:46
источник
1

$ bzr help pull

  

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

     

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

     

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

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

$ bzr pull --overwrite

    
ответ дан galen 21.11.2011 в 04:37
источник