2

自己找到了构建工程师和系统人员的角色,我必须学习最终弄清楚一些事情——即如何设置我们的基础设施。在我上船之前,他们没有。考虑到这一点,如果我问任何应该很明显的问题,请原谅我。

我们目前有 3 级分布式 mercurial 存储库:每台开发人员机器上的第一级,中央(主干)服务器上的第二级 - 只能从本地网络访问,第三层在 BitBucket 上。工作流程如下:

  1. 本地开发:开发人员从本地网络服务器中提取变更集。解决合并冲突后,开发人员提交到本地并推送到我们的本地服务器。一个预定的脚本在一夜之间将所有内容备份到 BitBucket。

  2. 在家工作:开发人员从 BitBucket 中提取变更集。开发人员提交到他们的本地 repo 并推送到 BitBucket。

  3. TeamCity 为每个项目从本地网络服务器获取 repo 更改,并运行构建/自动部署到测试环境。

我遇到的问题是场景 2:目前,如果有人将某些东西推送到 bitbucket,那么他们有责任在他们回到办公室时将其合并回来。如果它可以自动化,那就有点浪费时间了。

如果您想知道,我们在本地网络上有一个中央存储库的原因是因为运行 BitBucket 存储库的 TeamCity 构建会很慢。没有测试,所以这只是一个有根据的猜测。

无论如何,计划并从本地网络上的中央存储库推送所有更改的脚本只是为每个存储库运行“hg push”。它必须事先进行拉/合并。我该怎么做?

这是 pull 必须使用开关的: - pull 后更新 - 如果发生合并冲突,总是采用更新的文件 - 如果出现错误,向系统管理员发送电子邮件 - 有什么额外的吗?

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

更新:根据最近的答案,如果需要澄清预期的方法,我觉得一个重要方面。这个想法不是在我们的本地网络中央存储库上强制合并。相反,它应该解决合并冲突,就像在开发人员机器上使用 HgWorkbench 一样使用 post pull:更新 + 合并。默认情况下,所有开发人员都启用此功能,因此应该没问题。

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

  1. 从 BitBucket 拉取
  2. 更新+自动合并
  3. 任何合并自动冲突?

    3.1 是 -> 发邮件给管理员手动合并 -> 中断

    3.2 否 -> 继续

  4. 获取传出变更集。push会创建多个head吗?(由于拉/更新,这可能是多余的)

    4.1 是 -> 提示管理员。休息。

    4.2 否 -> 推送更改

希望这能澄清一点。现在,这可以单独使用 hg 命令来完成 - 批处理 - 还是我必须编写脚本?具体可以发邮件吗?

谢谢。

4

3 回答 3

3

所以你所有的工作都可以在 BitBucket 上找到,对吧?为什么不将 BitBucket(可在任何地方使用)作为主要的 repo 源并删除您的本地服务器?您可以使用 TeamCity 从 BitBucket 中为您的夜间构建和开发人员提取更改,他们将始终使用 BitBucket 的当前存储库并自行解决所有合并问题,因此您不会有任何后续合并。

于 2012-06-06T08:55:48.153 回答
2

如果它们有冲突,我不会尝试自动合并更改,这只会导致损坏和不一致的版本以及“丢失”的更改,从而导致混乱和混乱。如果不清楚合并应该是什么样子,请不要自动合并它。

一个更好的选择是只保留两个头并推/拉它们而不合并。这样,每个人仍然可以从工作/家中获取他正在处理的数据版本。必须进行手动合并,但这也可以在工作中或在家中完成,使开发人员能够从任何地方解决问题。在这种情况下,您还可以发送电子邮件以确保每个人都知道该问题。

于 2012-06-06T08:57:55.233 回答
1

我想您可以使用脚本自动执行此操作,如果我是您,我会尝试使用 PowerShell。但是,有时这可能需要在发生冲突时手动合并更改(因为当开发人员同时提交对 BB 和本地存储库的更改时,这些更改可能会发生冲突)。

于 2012-06-06T08:34:43.880 回答