bzr pull vs bzr merge

Wei*_* Hu 17 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?
Run Code Online (Sandbox Code Playgroud)

我理解git和darcs,但对bzr一无所知.类比git或darcs会有很大帮助.

编辑2:update应该checkout只与谁合作?这样做的update一个branch似乎没有做任何事情.

Chr*_*way 35

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

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

remote: A --> B --> C --> D
         \                 \
       (branch)           (pull)
           \                  \
local:      \--> A (no change) \--> D
Run Code Online (Sandbox Code Playgroud)

pull,如果两个分支都没有分歧,即,如果目标的修订是源的旧版本才有效.push只是相反的操作:它将本地分支中的更改复制到旧版本的远程分支.

remote: A      (no change)       --> C
         \                      /
       (branch)             (push)
           \                  /
local:      \--> A --> B --> C
Run Code Online (Sandbox Code Playgroud)

merge如果要将更改复制到与远程分支不同的本地分支,则使用A.

remote: A --> B --> C --> D
         \                 \  
       (branch)           (merge) 
           \                  \ 
local:      \--> A --> X --> Y --> Z
Run Code Online (Sandbox Code Playgroud)

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

A checkout允许您在类似于CVS/SVN的模式下使用bzr:本地分支将"附加"到远程分支; commits将自动push编辑; 如果远程分支发散,则提交将失败; a update只是merge来自"附加"远程分支.

  • 即使在第一次"合并"时,你是否会发生冲突,或者只是在你多次合并之后才会发生冲突?你在每次'合并'之后"承诺"吗?合并算法很复杂,在没有冲突的情况下能够和不能解决的算法通常是令人惊讶的. (2认同)
  • 在我'不止一次'合并之后.每次'合并'后我都没有`commit`.这一切现在都有意义. (2认同)