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