忽略将来对Mercurial中的文件所做的更改,但仍然跟踪它

忽略将来对Mercurial中的文件所做的更改,但仍然跟踪它,mercurial,Mercurial,可能重复: 我在Mercurial存储库中有一个文件,我想将其作为示例配置文件,但在开发它的过程中,我想对其进行特定的更改,但不希望跟踪,比如数据库密码。我尝试将该文件添加到.hgignore,但Mercurial仍然注意到修改 我是否可以在Mercurial存储库中“跟踪”一个文件,而不从存储库中删除该文件而忽略该文件未来的本地更改 您可以在以后的提交中排除该文件 如果您从命令行使用hg,这可能会很麻烦,因为您必须手动指定要提交的文件,但是如果您使用类似的方法,您可以在提交表单中取消选中配置

可能重复:

我在Mercurial存储库中有一个文件,我想将其作为示例配置文件,但在开发它的过程中,我想对其进行特定的更改,但不希望跟踪,比如数据库密码。我尝试将该文件添加到
.hgignore
,但Mercurial仍然注意到修改


我是否可以在Mercurial存储库中“跟踪”一个文件,而不从存储库中删除该文件而忽略该文件未来的本地更改

您可以在以后的提交中排除该文件


如果您从命令行使用hg,这可能会很麻烦,因为您必须手动指定要提交的文件,但是如果您使用类似的方法,您可以在提交表单中取消选中配置文件,它的更改将不会进入更改集。

我认为此功能不存在(不过,我很想看到其他人的答案,并提供一个选项:))。我使用的另一种方法是将一个名为“config.template”的文件签入源代码管理(例如)。该应用程序实际上使用了一个名为“config”的文件,然后我通过复制模板文件创建了该文件。然后确保“.hgignore”文件中排除了“config”文件,这样您就不会在某个时候意外地签入。

不,Mercurial中没有内置的自动处理此问题的支持,嗯。。。不是你问的那样

文件有两种状态:

  • 追踪
  • 未追踪
.hgignore
文件所做的唯一一件事就是帮助执行所有命令,这些命令只会查看所有未跟踪的文件,并将它们添加到存储库(即添加它们以进行跟踪)。跟踪文件后,将始终对其进行跟踪

其余部分留给手动处理,这意味着如果您跟踪一个文件,但不想将更改提交给它,则每次提交时都必须取消选中、忽略或以其他方式确保commit命令不会提交该文件

处理此问题的首选方法是提交模板。然后,如果可能,向构建过程中添加一个步骤,检查是否存在实际的配置文件,如果不存在,则从模板复制一份。您确保的实际配置文件未被跟踪,并添加到
.hgignore
文件中


通过这种方式,您可以更改实际的配置文件,但除非您专门将其添加到存储库中,否则不会自动跟踪该文件,并且在提交过程中无需执行任何操作。

不会跟踪
您的.config.example
并忽略真正的
您的.config
工作吗?这样,当您需要添加设置时,示例配置会被跟踪,但您的特定设置会被忽略。@这是个好主意,但最好不要求克隆人重命名文件。@Rich-强制人们复制配置文件模板/示例的好处是,它还提醒他们可能需要为自己的环境配置应用程序,而不仅仅是使用上次签入的配置文件运行应用程序;当然,负面的一面是,当对模板进行更改时,他们也必须手动更新配置(pro:他们正在考虑新的配置选项)。此外,如果你真的感到不安,你可能会将复制/合并部分添加到你的构建中…@克里斯,谢谢你说服我;我最终走了那条路。我添加了一个小口哨,如果用户试图在不重命名示例文件的情况下构建项目,它会对用户大喊大叫。