我正在使用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一无所知。类比git或darcs会有很大的帮助。
编辑2 :update
是否仅适用于checkout
?在update
中执行branch
似乎无能为力。
答案 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