我正在使用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似乎没有任何作用。

最佳答案

请注意,我没有做任何本地
变化。推荐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/

10-14 16:21