【问题标题】:bzr pull vs bzr mergebzr 拉取与 bzr 合并
【发布时间】:2010-01-11 20:55:00
【问题描述】:

我将 bzr 用于一个非常简单的任务:获取 GNU Emacs 的开发版本。在最初的bzr branch 之后,我想保持我的本地版本是最新的。我阅读了有关bzr pullbzr merge 的文档,但无法理解。我试了几天bzr merge,发现bzr merge经常会导致无法解决的冲突。请注意,我没有进行任何本地更改。 bzr pull 是推荐的方式吗?

EDIT 1(添加了一张从Chris Conway窃取的图表):

remote: A --> B --> C --> D
         \                 \
       (branch)           (merge)
           \                  \
local:      \--> A (no change) \--> why conflicts?

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

编辑 2update 是否应该仅与 checkout 一起使用?在branch 中执行update 似乎没有任何作用。

【问题讨论】:

  • 我正在删除 emacs 标签并添加版本控制,因为它更多地与 Emacs 本身有关。

标签: version-control bazaar


【解决方案1】:

请注意,我没有制作任何本地 变化。是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 是不可能的。请注意,您必须在merge 之后commit 才能保存新的合并修订,而拉取自动将分支带到已保存的修订点。

checkout 允许您以类似于 CVS/SVN 的模式使用 bzr:本地分支将“附加”到远程分支; commits 将自动成为pushed;如果远程分支已经发散,提交将失败; update 只是来自“附加”远程分支的 merge

【讨论】:

  • 不错的 ascii 艺术,谢谢。我不清楚,即使没有本地更改,为什么merge 也会引起冲突?
  • 您是否会在第一个 merge 上出现冲突,或者仅在您多次 merged 后出现冲突?你在每个merge 之后commit 吗?合并算法很复杂,它在没有冲突的情况下能解决和不能解决的问题往往令人惊讶。
  • 在我不止一次merged 之后。在每个merge 之后我没有commit。现在这一切都说得通了。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    $bzr help pull

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

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

    如果您想替换本地更改并且只想要您的分支 要匹配远程,请使用 pull --overwrite。这甚至可以工作 如果两个分支已经分叉了。

    所以你可以使用:

    $bzr pull --overwrite

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 2018-05-08
      • 1970-01-01
      相关资源
      最近更新 更多