【发布时间】:2009-08-10 15:38:49
【问题描述】:
我是一名使用 django 独立工作的网络开发人员,我正在努力了解如何最好地使用 mercurial 部署网站。我想要的是能够保留一个可用于生产和开发工作的存储库。生产/开发之间总会有一些差异(例如,他们可能使用不同的数据库,开发总是会打开调试),但总的来说它们是同步的。我还希望能够直接在生产服务器上进行更改(整理 html 或 css,简单的错误修复等)。
我打算使用的工作流程如下:
- 创建 2 个分支,prod 和 dev(所有设置最初设置为生产设置)
- 在 dev 分支中更改 settings.py 和其他一些内容。所以现在我有 2 个头,从现在开始,存储库将永远有 2 个头。
- (在开发机器上)对开发进行更改,然后使用“hg 移植”将相关变更集复制到生产环境。
- 推送到主存储库
- (在生产服务器上)从主仓库拉取,更新到产品头
注意:只要将更改移植到 dev 中,您也可以直接对 prod 进行更改。
此工作流程的缺点是,每当您进行更改时,您不仅必须将其提交到您进行更改的任何分支,还必须将其移植到另一个分支。有没有更明智的方式来做我想做的事,也许是使用补丁?或者如果做不到这一点,有没有办法自动化提交过程以自动将变更集移植到另一个分支,这是一个好主意吗?
【问题讨论】:
-
我会在下面给出一个答案,尽管 Steve L. 的优秀建议已经被选中,但我想指出,不管你最终如何做到这一点,
transplant扩展是一种特别糟糕的方法。 Transplant 会先导出然后再导入,这会为您的变更集提供一个全新的哈希/节点 ID。如果每个变更集在开发和生产之间更改名称,您就会在跟踪问题在哪里和哪里引入问题时遇到麻烦。让hg incoming和hg outgoing在 dev 和 prod 之间无法使用是自找麻烦。