Merge 在巴扎合并两个退房处

Merge 在巴扎合并两个退房处,merge,bazaar,checkout,Merge,Bazaar,Checkout,我刚刚开始使用bazaar,我发现签出功能对我的工作方式最有用——即我可以从“主副本”进行c/o,进行一些开发,然后在新目录中提交我的更改。然后更新“主副本” 但是如果我在(例如)两个项目上工作,更改代码的不同部分,会怎么样?说: ~/master - master copy bzr co master ./gui bzr co master ./engine 所以我在./gui目录中做与gui相关的工作,在./engine中做幕后工作。我应该如何提交我的更改?若

我刚刚开始使用bazaar,我发现签出功能对我的工作方式最有用——即我可以从“主副本”进行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


我希望我所要达到的目标是明确的!提前感谢您的时间。

是的,如果检测到冲突,bzr应该阻止您从引擎回购中签入更改。通常情况下,您首先在办理入住手续之前进行“bzr检查”,然后确保您的物品与其他人配合良好

至于你问题的第二部分,关于鼠标/键盘分支,我通常会这样做。只需将cd插入gui目录,然后执行以下操作:

bzr merge ../mouse
合并更改后,您可以从gui目录提交,它会将更改集发送到“master”目录


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

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

然而,听起来您希望有单独的开发人员处理“gui”和“引擎”,或者您只想保存冲突解决方案,直到两个分支上的开发都完成。在这种情况下,您可能应该使用“bzr branch”将它们创建为独立的分支。每个分支都可以使用本地提交,而不必担心彼此之间的冲突。然后,当需要合并时,您可以通过以下三种方法之一进行合并,所有方法都会得到相同的最终结果:

1.将一个分支合并到另一个分支,然后将其向上推到主分支: 上述方法的缺点是,您的“gui”分支现在具有“引擎”更改。如果将两个分支推回主线后,您要将它们扔掉,这是很好的。但如果您想让分支保持更长的时间,您可以:

2.并入主线: 这样做的好处是,“gui”和“引擎”仍然是独立的分支,但在确定它们可以一起工作之前,您必须向master提交一个分支。所以你可能真的想:

3.创建合并分支:
嗯,显然StackOverflow对bash代码进行了奇怪的格式化,尽管我在前面加了四个空格。(!?)显然代码块不能包含在列表中。我已经编辑了你的文章以使用手动编号的标题,现在看起来不错。是的,我只是去阅读了格式指南。如果我试图用纯文本对我自己的列表进行编号,它会变成一个会弄乱其他格式的列表,这似乎真的很愚蠢。我通过把我的列表项设为标题来解决这个问题。
cd gui
bzr merge ../engine
# manually fix any conflicts
bzr commit
bzr push #back up to main
cd master
bzr merge ../gui
bzr commit
bzr merge ../engine
# manually fix conflicts
bzr commit
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