2

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

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

我们有两个选择:

  1. 在生产机器上设置另一个 Mercurial 存储库(称为“生产存储库”)。当新的生产版本获得批准时,将更改从 Redmine 存储库拉到生产存储库,然后将本地工作目录更新为生产存储库中的适当修订版。

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

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

感谢您对此选择(或此设置的任何其他方面)的任何评论!

4

1 回答 1

4

这听起来是个坏主意。Mercurial 在保持其存储库原子读写方面做得非常好,但是当存储库位于共享驱动器上时(即使它只是一个使用它的本地存储库),它会更难做到这一点,因为网络共享(尤其是在 Windows 上)并不总是像他们所说的那样使事情变得原子化。

理想情况下,您的存储库(工作目录和存储库)尽可能在本地,并且您使用推/拉来获取/从网络共享的变更集。如果这是不可能的,那么在远程文件系统上使用一个本地应用程序是最好的主意。

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

与其试图背负,不如在你的 redmine 存储库中放一个这样的钩子:

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

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

于 2012-08-24T02:25:21.093 回答