5

我刚从集市开始,我发现结帐功能对我的工作方式最有用 - 即我可以从“主副本”中复制,进行一些开发,然后提交我的更改新目录。然后这会更新“主副本”。

但是,如果我正在处理(例如)两个项目,更改代码的不同部分怎么办?说:

~/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?

我希望很清楚我想要达到的目标!在此先感谢您的时间。

4

2 回答 2

6

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

但是,听起来您希望让单独的开发人员在“gui”和“engine”上工作,或者您只想保存冲突解决方案,直到两个分支的开发完成。在这种情况下,您可能应该使用“bzr 分支”将它们创建为独立的分支。每个分支都可以使用本地提交,而不必担心相互冲突。然后,当需要合并时,您可以使用以下 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”和“engine”作为单独的分支,但是您必须先提交一个来掌握,然后才能确定它们会一起工作。所以你真的很可能想要:

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
于 2009-08-20T16:34:31.453 回答
0

是的,如果 bzr 检测到冲突,它应该阻止您从引擎存储库中签入更改。通常,您首先会在办理登机手续之前进行“bzr up”,然后确保您的东西与其他人相处得很好。

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

bzr merge ../mouse

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

请注意,我几乎不是 bzr 专家,但这是我处理 SVN 存储库的方式。

于 2009-07-25T17:02:32.987 回答