使用一个Mercurial存储库作为两个Mercurial安装的本地存储库

时间:2012-08-23 21:40:28

标签: mercurial project-management redmine

我们有一个专用的问题跟踪(Redmine)机器,它有一个Mercurial存储库(称之为“Redmine存储库”)。 Redmine设置为使用该存储库,据我所知,Redmine从未对该存储库进行任何更改。所有开发人员(最终)都将他们的更改推送到该存储库。

我们还有一个专用的生产机器,它可以执行代码,但不用于对代码进行任何更改。

我们有两个选择:

  1. 在生产计算机上设置另一个Mercurial存储库(称之为“生产存储库”)。批准新的生产版本时,将更改从Redmine存储库提取到生产存储库,然后将本地工作目录更新为生产存储库中的相应修订版。

  2. 重用生产机器上的现有Redmine存储库,将其指定为Mercurial安装的本地存储库(Redmine存储库位于可轻松安装在生产计算机上的共享驱动器上)。每当批准新产品时,将本地工作目录更新为Redmine存储库中的相应修订版。

  3. 使用选项#2,我们摆脱了额外的“拉动”步骤(从Redmine存储库到生产存储库),这略微简化了流程。但是我不确定两个Mercurial安装是否可以使用单个存储库,就好像它是本地的一样。

    对此选择(或此设置的任何其他方面)的任何评论表示赞赏!

1 个答案:

答案 0 :(得分:4)

这听起来不错。 Mercurial非常好地保持对其存储库的读取和写入是原子的,但是当存储库位于共享驱动器上时,它很难做到这一点 - 即使它只是一个使用它的本地存储库 - 因为网络共享(特别是在Windows上)并不总是让他们说他们做的事情是原子的。

理想情况下,您的存储库(工作目录和存储库)在可能的情况下都是本地的,您可以使用推/拉来将更改集传入/传出网络共享。如果那是不可能的话,那么在远程文件系统上使用repo的单个本地应用程序是最好的选择。

如果您确实想尝试使用相同的底层存储库来使用两个克隆,请查看ShareExtension,它与Mercurial一起提供,但仅供高级用户使用。

为什么不在你的redmine存储库中放置这样的钩子,而不是试图捎带:

[hooks]
changegroup = hg push //production/clone

这将自动将到达redmine的变更集推送到生产中。