17

我将 bzr 用于一个非常简单的任务:获取 GNU Emacs 的开发版本。在初始之后bzr branch,我想保持我的本地版本是最新的。我阅读了关于bzr pulland的文档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 会有很大帮助。

编辑2update应该checkout只使用?做一个updatein abranch似乎没有做任何事情。

4

3 回答 3

35

请注意,我没有进行任何本地更改。是bzr pull推荐的方式吗?

是的,这听起来像是bzr pull适合您使用的命令。pull获取远程源分支并将任何更改从它复制到较旧版本的本地目标分支。(我在这里使用“远程”和“本地”来表示“源”和“目的地”。任何两个分支都可以,甚至是两个本地分支。)

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

Apull仅在两个分支没有分歧的情况下才有效,即,如果目标的修订版是源的旧修订版。push只是相反的操作:它将本地分支中的更改复制到较旧版本的远程分支。

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

merge当您想要将更改复制到与远程分支不同的本地分支时,使用A。

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

在这里,Z包括所有的变化D和变化Y。在这种情况下Apull是不可能的。请注意,您必须commit在 amerge之后才能保存新的合并修订,而 pull 会自动将分支带到已保存的修订点。

Acheckout允许您以类似于 CVS/SVN 的模式使用 bzr:本地分支将“附加”到远程分支;commits 将被自动push编辑;如果远程分支已经发散,提交将失败;anupdate只是merge来自“附加”远程分支的一个。

于 2010-01-12T05:56:51.333 回答
4

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

于 2010-01-12T11:46:44.203 回答
2

$bzr help pull

目的:把这个分支变成另一个分支的镜像。

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

如果您想替换本地更改并且只希望您的分支与远程分支匹配,请使用 pull --overwrite。即使两个分支已经分歧,这也将起作用。

所以你可以使用:

$bzr pull --overwrite

于 2011-11-21T03:37:00.707 回答