在集市合并两个结账

Dav*_*ave 5 merge bazaar checkout

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

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

~/master                - master copy
bzr co master ./gui
bzr co master ./engine
Run Code Online (Sandbox Code Playgroud)

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

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

为了使事情变得更复杂,如果我这样做怎么样:

bzr branch gui ./mouse
Run Code Online (Sandbox Code Playgroud)

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

bzr branch gui ./keyboard
Run Code Online (Sandbox Code Playgroud)

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

我希望很清楚我正在努力实现的目标!在此先感谢您的时间.

Cod*_*ine 6

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

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

1.将一个分支合并到另一个分支,然后将其推送到主控:

cd gui
bzr merge ../engine
# manually fix any conflicts
bzr commit
bzr push #back up to main
Run Code Online (Sandbox Code Playgroud)

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

2.合并到主线:

cd master
bzr merge ../gui
bzr commit
bzr merge ../engine
# manually fix conflicts
bzr commit
Run Code Online (Sandbox Code Playgroud)

这有一个好处,你仍然有"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
Run Code Online (Sandbox Code Playgroud)