如何永久告诉Mercurial不提交修改后的版本化文件?

时间:2013-10-22 14:23:47

标签: mercurial hgignore

我的存储库根目录中有一个文件default.config。我把它调整为我自己的设置,我不想提交它。永远。除commit -X "^default\.config$"以外我有哪些选择?

我已将^default\.config$添加到.hgignore,但仍会显示在hg status -mard的输出中。

编辑:也许可以使用Mercurial Queues执行此操作。如果我将所有本地配置更改保存在一个补丁中,那么我只需要记住在提交之前弹出它。只是大声思考......

2 个答案:

答案 0 :(得分:2)

请按照以下步骤操作:

  • 将文件复制到工作目录之外的某个位置
  • 使用hg rm default.config删除文件并提交更改
  • 将您的文件复制回工作目录

作为一种好的做法,您可以添加一个名为default.config.template的文件或者提交到存储库的文件。此文件包含某些默认值或关于如何使用它的注释,而其他用户/开发人员可以将此文件复制到default.config,如果他们正在使用您的项目。

答案 1 :(得分:1)

Akluth有正确的答案:将模板文件提交到您的存储库,然后将其复制到每个工作副本中的真实姓名。如果配置文件支持它,则使用include指令从真实配置文件加载模板文件。像

这样的东西
// default.config
//
// load defaults from versioned template file

#include "default.config.template"

// override defaults with my settings
db_hostname = localhost
db_user = me

另一种方法是根据您的建议对每个命令使用-X。有exclude extension实现了这个想法。请记住阅读警告 - 它在合并时不起作用,因为在提交合并时无法排除文件。扩展需要扩展以处理这种情况,可能是在合并之前搁置变更并在之后取消搁置。

这表明了另一种策略,类似于您建议使用MQ:在一组pre-post-挂钩中使用新的shelve extension来搁置/取消搁置每个文件之前/之后的文件操作。我认为这可行,但我还没有在现实生活中尝试过。