我在最近的项目中使用 Mercurial。在我部署项目的网络服务器上,我的配置文件与生产设置略有不同。问题是当我拉动
和更新
时,我经常还必须 merge
和提交
。
这是正确的工作流程吗?似乎很奇怪,为了能够继续更新,我必须提交变更集,我认为 merge 会将它们集成到我的生产分支中,并在每次更新时继续这样做。这是我还不习惯的分布式版本控制范例吗?
最佳答案
一种选择是将特定于服务器的部署设置完全保留在版本控制存储库之外。
这意味着在服务器上手动上传并更改它们,但无需不断 merge 。它还使数据库密码等内容不受版本控制,这可能是一件好事。
例如,当我使用 Django 应用程序时,我会 checkin 一个 settings.py
文件,其中包含:
- 所有在服务器之间不会发生变化的设置(站点名称、安装的 Django 应用等)。
- 用于本地开发的“服务器特定”设置(数据库位置等)。
- 末尾的
from deploy import *
行。
from deploy import *
行会提取 deploy.py
文件中的所有项目(如果存在)。在测试/登台/生产服务器上,我将创建此文件并将特定于服务器的设置放入其中。因为导入发生在 settings.py
的末尾,所以这些将覆盖主设置文件中任何本地开发特定的设置。
这样做意味着本地运行和开发所需的所有内容都会 checkin 版本控制,但不会 checkin 特定于服务器和/或敏感信息(例如密码)(因此永远不需要 merge )。它需要一些额外的工作来设置(添加导入行并最初在服务器上创建 deploy.py
文件)。
这个特定的方案适用于 Django 项目,但也许类似的想法适合您。
关于mercurial - 每次在生产服务器上更新 Mercurial 分支时是否都必须 merge 并提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1830303/