2012-06-06 99 views
2

在我身为建筑工程师和系统人员的角色中,我必须学习最终弄清楚一些事情 - 即如何设置我们的基础架构。在我加入他们之前,他们没有任何。考虑到这一点,如果我问任何本该显而易见的问题,请原谅我。Mercurial分布式存储库

目前,我们有3个层次的分布式善变库:在每个开发人员的机器,在中央(主干)两级的一个级别的服务器 - 只有从本地网络访问和到位桶的第三层。工作流程如下:

  1. 本地开发:开发人员从本地网络服务器提取变更集。一旦合并冲突得到解决,开发人员将提交到本地并推送到我们的本地服务器。一个安排好的脚本在一夜之间支持BitBucket。

  2. 在家工作:开发商从到位桶拉更改集。开发人员向他们的本地回购协议致敬并推送到BitBucket。

  3. 的TeamCity拿起从本地网络服务器为每个项目回购的变化和运行构建/自动部署到测试环境。

问题我打的场景2:此刻,如果有人推的东西到位桶它是把它合并回当他们回到办公室时他们的责任。如果可以实现自动化,这有点浪费时间。

如果你想知道,我们有本地网络上的中央回购的原因是因为这将是运行的TeamCity建立到位桶仓库的缓慢。没有测试过,所以这只是一个受过教育的猜测。

总之,该计划并推动从中央存储库本地网络上的所有更改的脚本只是运行“汞推”每个库。它必须事先进行拉/合并。我该如何做到这一点?

这是拉将不得不使用的开关: - 更新拉 之后 - 在合并冲突的情况下,始终以较新的文件 - 在错误的情况下,请发送电子邮件至系统管理员(或多个) - 什么额外的?

请随意分享您自己的设置,只要它与所描述的没有太大的不同。

更新:在最近的答案的光,我觉得一个重要的方面,如果预期的方法需要加以澄清。这个想法不是强制合并在我们的本地网络中央回购。相反,它应该解决合并冲突的问题,就像在开发者机器上使用HgWorkbench进行post pull:update + merge一样。所有的开发者默认都有这个,所以应该没问题。从到位桶

  1. 更新+自动合并
  2. 任何合并自动冲突:

    因此,对服务器的脚本/批处理文件将执行以下操作?

    3.1是 - >发送电子邮件给管理员手工合并 - >打破

    3。2否 - > Cary

  3. 获取传出变更集。将推动创造多个头? (由于拉/更新,这可能是多余的)

    4.1是 - >提示管理员。打破。

    4.2否 - >更改推

希望这清除了一点东西。现在,可以单独使用hg命令 - 批处理 - 还是必须编写脚本?具体可以发送电子邮件吗?

谢谢。

+2

改变TeamCity从BitBucket运行应该是微不足道的。既然你只是猜测它会变慢,我想你应该尝试一下,然后再尝试解决这个问题。奇怪的是,基本上有两个同层的副本(BitBucket和本地中央服务器) –

+0

不可否认,拥有两层可能会很奇怪。但这是分发给我的手段。它应该能够处理任意数量的图层。无论如何,我会尝试直接连接到BitBucket,看看它是如何发展的。这并不像您想象的那样微不足道,因为您必须开始玩优化 - 减少为每个构建下载的源代码量(而不是清理某些文件夹),甚至可能重构某些解决方案以满足此需求。黄金法则:每个计划需要三倍的时间执行按计划:) –

回答

3

因此,你所有的工作都可以在BitBucket上找到,对吧?为什么不制作BitBucket(从任何地方都可用)您的主要回购来源和删除您的本地服务器?您可以使用TeamCity从BitBucket中获取更改,以便您的每晚构建和开发人员始终使用BitBucket中的当前回购并自行解决所有合并问题,这样就不会有任何后续合并问题。

+0

谢谢kworr。说实话,我们正在考虑这样做。不过,Mercurial应该是一个分布式源控制系统。我们保留本地中央服务器的原因首先是性能,其次是我们的CTO对于没有所有代码的中央本地副本仍然有点偏执。尽管我们可以用ButBucket来扭转角色。会考虑。 –

+0

Mercurial是一个DVCS,但没有人会强迫你使用它的所有设计可能性。 – kworr

+0

您可以随时设置您的本地服务器以从BitBucket中获取更改,以便为您制作其他备份。我不是一个Mercurial guru,但你也可以从本地服务器获取更改并将它们推送到BitBucket。你也可以拒绝在本地服务器上推送任何推送到BitBucket。 – kworr

1

我想你可以使用脚本自动化,如果我是你,我会尝试使用PowerShell。但是,有时这可能需要在发生冲突时手动更改合并(因为当开发人员对BB和本地回购提交更改时,这些更改可能会发生冲突)。

+0

感谢您的建议马立克。有意义但是我想探索一个批处理文件中包装的hg命令。如果其他可能性失败,这肯定会成为后备选择。关于手动合并的好处。 –

2

我不会尝试自动合并更改,如果他们冲突,这只会导致破损和不一致的版本和“失去”的变化导致混乱和混乱。如果不清楚合并的方式,请不要自动合并它。

一个更好的选择是将两个头保持在一起,并将它们推入/拉出而不合并。通过这种方式,每个人都可以从工作/家中获得他正在处理的数据版本。手动合并必须完成,但这也可以在工作或家中完成,使开发人员可以从任何地方解决问题。您也可以在这种情况下发送电子邮件,以确保每个人都知道这个问题。

+0

谢谢。用预期的方法提出了一些很好的问题。我会为主要问题添加一个更新。 –