Mercurial:如何在独立分支追踪配置文件并兼顾开发流程
解决DVCS中开发克隆的配置文件追踪难题
我之前在Mercurial开发时也碰到过几乎一模一样的痛点——既要让配置文件随时可用(保证软件能跑),又要追踪它的修改历史,还不想污染主分支或者频繁切换分支折腾。结合实际使用经验,给你几个实用的方案:
方案一:私有分支+忽略规则(最推荐)
这是我现在一直在用的方式,完美平衡了开发便捷性和配置追踪需求:
- 第一步,先把配置模板文件(比如
config.ini.template)提交到default分支,作为团队共享的基础配置模板。 - 在你的开发克隆里,复制模板为实际用的配置文件(比如
config.ini),然后把config.ini加入.hgignore,这样它不会被默认提交到default分支,切换分支时也不会被覆盖。 - 创建一个仅本地存在的私有分支(比如命名为
local-config-track),这个分支不用推送到团队远程仓库,只用来追踪你的配置修改。 - 当你修改了
config.ini,切换到local-config-track分支(因为配置文件被忽略,切换时不会影响你的工作区内容),提交修改到这个分支即可。提交完切回default继续开发,配置文件依然在原地可用。 - 当
default分支有团队更新时,直接用hg rebase把local-config-track的变更集变基到最新的default上——因为这个分支只有你自己用,变基几乎不会有冲突问题。 - 如果要把配置同步到其他开发克隆,只需要把这个私有分支推送到你自己的个人远程仓库就行,完全不会干扰团队的主分支。
这个方案的核心是把配置的追踪和主开发分支彻底分离,平时开发完全不用管配置分支,只有修改配置时才需要切换一次,成本极低。
方案二:本地临时提交+忽略恢复(无需额外分支)
如果你不想维护额外的分支,可以试试这个轻量方案:
- 同样先提交配置模板到
default,本地复制为实际配置文件并加入.hgignore。 - 当你修改了配置文件,先把当前
default的工作区改动暂存起来:hg shelve - 强制把配置文件加入提交队列:
hg add -f config.ini,然后提交这个修改(备注写清楚是本地配置更新,比如local config: update database connection) - 提交完成后,立刻把
default分支的配置文件恢复到未提交状态:hg revert -r .^ config.ini,然后用hg unshelve恢复之前暂存的工作区改动。 - 这个单独的配置变更集会留在你的本地仓库里,用
hg log config.ini就能随时查看所有配置修改的历史。
这个方案不用切换分支,所有配置变更都在本地,不会推送到远程(除非你特意操作),适合偶尔修改配置的场景。
方案三:子仓库分离配置(适合复杂配置场景)
如果你的配置文件较多,或者需要跨多个项目共享配置,可以用子仓库的方式:
- 创建一个单独的Mercurial仓库来存放你的本地配置,远程设为你自己的私有仓库。
- 在主项目仓库里,把这个配置仓库作为子仓库添加:
hg subrepo add ./config <你的私有配置仓库URL> - 把主项目里的
.hgsub和.hgsubstate文件提交到default分支,团队其他人拉取主项目时,这个子仓库会是空的或者用模板配置,不会影响他们的开发。 - 你自己拉取主项目后,同步你的私有配置子仓库,这样主项目的
config目录里就是你的可用配置,修改配置直接在子仓库提交,完全不用切换主项目的分支,也不会污染主分支。
这个方案适合配置复杂、需要跨项目复用的场景,唯一的小缺点是需要维护两个仓库,但管理成本其实很低。
内容的提问来源于stack exchange,提问作者alexis
相关产品推荐
相关产品推荐

