我正在使用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
似乎没有任何作用。 最佳答案
请注意,我没有做任何本地
变化。推荐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
允许您在类似于CVS / SVN的模式下使用bzr:本地分支将“附加”到远程分支; commit
s将被自动push
;如果远程分支分歧,则提交将失败; update
只是“附加的”远程分支中的merge
。关于version-control - bzr pull vs bzr合并,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2044852/