how to ignore files in kiln/mercurial using tortoise hg “that are part of the repository”

风流意气都作罢 提交于 2019-11-26 21:03:12

I always use a combination of .hgignore and BeforeBuild (in the .csproj file) for things like this.

In one of my pet projects, I have the following setup:

App.config contains my real hardcoded user id and password for testing.
App.config.example is identical, but with fake data like "dummy_user" and "dummy_pw".

App.config is not part of the repository, and it's ignored (in .hgignore).
App.config.example is part of the repository.

Then, I have the following in the BeforeBuild target in the .csproj file of my solution:

<Target Name="BeforeBuild">
  <Copy
    Condition="!Exists('App.config')"
    SourceFiles="App.config.example" 
    DestinationFiles="App.config"/>
</Target>

All this together has the following effect:

  • the config file with the real data can never be accidentally committed to the repository, because it's ignored
  • the repository only contains the config file with the example data
  • if someone else clones the repository to his machine, he won't have the "real" config file...but if it's missing, it will be automatically created before the first build by Visual Studio / MSBuild by simply copying the .example file (and then he can just put his real login data into the newly created App.config file).
  • if an App.config with real hardcoded user data already exists, it won't be overwritten when building because the BeforeBuild event will only happen if App.config does not already exist
Martin Geisler

The answer by Christian is the right one, but I want to mention that TortoiseHg supports what you want with their Auto Exclude List.

One problem with an exclude list is that it cannot work with merges: you must commit all files when you merge and so you'll have to do a little dance with shelve, merge, commit, and unshelve.

When you do a TortoiseHG commit, there is a list of files with checkboxes by them. Deselect the files you do not want comitted.

Or, on the command line, do a commit of the form hg commit --exclude "pattern", where pattern is defined in the hg man page.

You could always use hg forget.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!