让我自己找到一个构建工程师和系统人员的角色,我必须学习最终找出一些东西 - 即如何设置我们的基础设施。在我登船之前他们没有任何东西。考虑到这一点,请原谅我,如果我问任何应该是显而易见的事情。
我们目前有3个级别的分布式mercurial存储库:每个开发者机器上的第一级,中央(中继)服务器上的第二级 - 只能从本地网络访问,第三层可以在BitBucket上访问。工作流程如下:
本地开发:开发人员从本地网络服务器提取更改集。一旦解决了合并冲突,开发人员就会提交到本地并推送到本地服务器。一夜之间安排的脚本将所有内容备份到BitBucket。
在家工作:开发人员从BitBucket中提取变更集。开发人员对其本地仓库进行调试并推送到BitBucket。
TeamCity为每个项目从本地网络服务器获取回购更改,并运行构建/自动部署以测试环境。
我遇到的问题是情景2:目前如果有人向bitbucket推送一些东西,那么当他们回到办公室时,他们有责任将其合并。如果可以实现自动化,那就浪费时间了。
如果您想知道,我们在本地网络上拥有中央存储库的原因是因为运行TeamBity版本的BitBucket存储库会很慢。没有测试过,这只是一个有根据的猜测。
无论如何,调度并从本地网络上的中央存储库推送所有更改的脚本只为每个存储库运行“hg push”。它必须事先进行拉/合并。我该怎么做?
这就是使用开关的拉力: - 拉后更新 - 如果发生合并冲突,请始终使用较新的文件 - 如有错误,请向系统管理员发送电子邮件 - 什么额外的?
请随意分享您自己的设置,只要它与描述的内容没有太大的不同。
更新:根据最近的答案,如果需要澄清预期的方法,我觉得这是一个重要的方面。我们的想法不是强制合并到我们的本地网络中央仓库。相反它应该解决合并冲突,因为在开发者机器上使用HgWorkbench并使用post pull:update + merge。默认情况下,所有开发人员都会启用它,因此它应该没问题。
因此服务器上的脚本/批处理文件将执行以下操作:
任何合并自动冲突?
3.1是 - >向管理员发送电子邮件以手动合并 - >破
3.2否 - > Cary on
获取外发更改集。会推动创造多个头? (由于拉/更新,这可能是多余的)
4.1是 - >提示管理员。断裂。
4.2否 - >推送更改
希望这会让事情变得清晰起来。现在,这可以单独使用hg命令完成 - 批处理 - 还是我必须编写脚本?特别是它可以发送电子邮件吗?
感谢。
答案 0 :(得分:3)
所以你的所有工作都可以在BitBucket上找到,对吧?为什么不使用BitBucket(从任何地方可以获得)主要的回购源并删除本地服务器?您可以使用TeamCity从BitBucket中获取更改,以便您的夜间构建和开发人员始终使用BitBucket上的当前仓库并自行解决所有合并问题,这样就不会有任何后续合并。
答案 1 :(得分:2)
如果这些更改存在冲突,我不会尝试自动合并这些更改,这只会导致版本损坏且不一致,并且“丢失”更改会导致混乱和混乱。如果不清楚合并应该如何,请不要自动合并。
更好的选择是只保持两个头并在不合并的情况下推/拉它们。这样每个人仍然可以从工作/家中获得他正在处理的那个版本的数据。必须进行手动合并,但这也可以在工作中或在家中完成,使开发人员能够从任何地方解决问题。您还可以在此方案中发送电子邮件,以确保每个人都知道此问题。
答案 2 :(得分:1)
我猜你可以使用脚本自动化这个,如果我是你,我会尝试使用PowerShell。但是,有时这可能需要在发生冲突时手动更改合并(因为当开发人员提交对BB和本地存储库的更改时,这些更改可能会发生冲突)。