在集市合并两个结账

时间:2009-07-25 16:39:34

标签: merge bazaar checkout

我刚开始使用集市,我发现结账功能对我的工作方式最有用 - 即我可以从“主副本”进行c / o,做一些开发然后提交我对新目录的更改。然后,这将更新“主副本”。

但是如果我正在研究(例如)两个项目,改变代码的不同部分呢?说:

~/master                - master copy
bzr co master ./gui
bzr co master ./engine

所以我在./gui目录中执行与gui相关的东西,并在./engine中使用引擎盖内容。我应该如何兑现我的更改?如果我首先使用gui,然后是引擎,我猜任何冲突都会在引擎中标记出来?

有没有办法合并gui和引擎,然后只对主副本进行一次提交?

为了让事情变得复杂一点,如果我这样做会怎么样:

bzr branch gui ./mouse

现在我也许我一直在研究鼠标,但也在gui上。如果我想合并来自gui和鼠标的代码,然后提交到master,那么管理它的最佳方法是什么?或者,如果我也是:

bzr branch gui ./keyboard

如果我改变了gui,键盘和鼠标,我应该分层合并 - 即鼠标+键盘,然后将其与gui合并,然后将gui提交给master?

我希望很清楚我正在努力实现的目标!提前感谢您的时间。

2 个答案:

答案 0 :(得分:6)

如果您有两个签出,那么每次更改一个签出时,您首先必须从另一个更改中删除任何更改,可能需要在每个步骤解决冲突。这通常是一个好主意,因为随着时间的推移更容易解决冲突并确保您的代码不会分歧太多。

但是,听起来你想要让单独的开发人员使用“gui”和“engine”,或者你只想保存冲突解决方案,直到两个分支上的开发完成为止。在这种情况下,您应该将它们创建为具有“bzr branch”的独立分支。每个分支都可以使用本地提交,而不必担心彼此之间的冲突。然后,当合并时,您可以使用以下3种方式中的一种方式,所有这些方法都得到相同的最终结果:

1。将一个分支合并到另一个分支,然后将其推送到master:

cd gui
bzr merge ../engine
# manually fix any conflicts
bzr commit
bzr push #back up to main

上述方法的缺点是你的“gui”分支现在有“引擎”变化。如果你将它们推回主线后要扔掉两个分支,这没什么问题。但是如果你想让分支更长,你可以:

2。合并到主线:

cd master
bzr merge ../gui
bzr commit
bzr merge ../engine
# manually fix conflicts
bzr commit

这有一个好处,你仍然有“gui”和“引擎”作为单独的分支,但你必须提交一个掌握,然后你才能确定它们可以一起工作。所以你真的可能想:

3。创建合并分支:

bzr branch ~/master gui-engine-merge
cd gui-engine-merge
bzr merge ../gui
bzr commit
bzr merge ../engine
# manually fix conflicts
bzr commit
bzr push ~/master
# since this branch was only for merging, you don't need it anymore:
cd ..
rm -r gui-engine-merge

答案 1 :(得分:0)

是的,如果检测到冲突,bzr应阻止您检查引擎存储库中的更改。通常情况下,您首先在办理登机手续之前先“bzr up”,然后确保您的东西与其他人一起玩得很好。

至于问题的第二部分,处理鼠标/键盘分支,这就是我通常会这样做的。只需cd进入gui目录,然后执行:

bzr merge ../mouse

合并更改后,您可以从gui目录提交,并将变更集发送到“master”目录。

请注意,我不是bzr专家,但这是我处理SVN回购的方式。