bzr pull vs bzr merge

时间:2010-01-11 20:55:01

标签: version-control bazaar

我正在使用bzr执行一项非常简单的任务:获取GNU Emacs的开发版本。在最初的bzr branch之后,我想保持我的本地版本是最新的。我在bzr pullbzr 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似乎无能为力。

3 个答案:

答案 0 :(得分:35)

  

请注意,我没有做任何本地的   变化。是bzr pull推荐的   方式是什么?

是的,听起来bzr pull是适合您使用的命令。 pull接受远程源分支,并将其中的任何更改复制到旧版本的本地目标分支。 (我在这里使用“remote”和“local”来表示“source”和“destination”。任何两个分支都可以,甚至两个本地分支。)

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允许您在类似于CVS / SVN的模式下使用bzr:本地分支将“附加”到远程分支; commit将自动push;如果远程分支发散,则提交将失败; update只是来自“附加”远程分支的merge

答案 1 :(得分:4)

合并用于合并两个不同的分支,而不是复制(本地和远程)。 使用拉。

答案 2 :(得分:1)

$ bzr help pull

  

目的:将此分支变成另一个分支的镜像。

     

- 覆盖忽略分支之间的差异并无条件地覆盖。

     

如果您想要替换本地更改,只想要您的分支机构   要匹配远程,请使用pull --overwrite。这甚至可以工作   如果两个分支有分歧。

所以你可以使用:

$ bzr pull --overwrite