我刚开始使用集市,我发现结账功能对我的工作方式最有用 - 即我可以从“主副本”进行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?
我希望很清楚我正在努力实现的目标!提前感谢您的时间。
答案 0 :(得分:6)
如果您有两个签出,那么每次更改一个签出时,您首先必须从另一个更改中删除任何更改,可能需要在每个步骤解决冲突。这通常是一个好主意,因为随着时间的推移更容易解决冲突并确保您的代码不会分歧太多。
但是,听起来你想要让单独的开发人员使用“gui”和“engine”,或者你只想保存冲突解决方案,直到两个分支上的开发完成为止。在这种情况下,您应该将它们创建为具有“bzr branch”的独立分支。每个分支都可以使用本地提交,而不必担心彼此之间的冲突。然后,当合并时,您可以使用以下3种方式中的一种方式,所有这些方法都得到相同的最终结果:
cd gui
bzr merge ../engine
# manually fix any conflicts
bzr commit
bzr push #back up to main
上述方法的缺点是你的“gui”分支现在有“引擎”变化。如果你将它们推回主线后要扔掉两个分支,这没什么问题。但是如果你想让分支更长,你可以:
cd master
bzr merge ../gui
bzr commit
bzr merge ../engine
# manually fix conflicts
bzr commit
这有一个好处,你仍然有“gui”和“引擎”作为单独的分支,但你必须提交一个掌握,然后你才能确定它们可以一起工作。所以你真的可能想:
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回购的方式。