Ответ 1
Я всегда использую комбинацию .hgignore и BeforeBuild
(в файле .csproj) для таких вещей.
В одном из моих домашних проектов у меня есть следующая настройка:
App.config
содержит мой настоящий идентификатор жесткого кода и пароль для тестирования. App.config.example
идентичен, но с поддельными данными, такими как "dummy_user" и "dummy_pw".
App.config
не часть репозитория, и игнорируется (в .hgignore
). App.config.example
является частью репозитория.
Затем у меня есть следующее в BeforeBuild
target в файле .csproj моего решения:
<Target Name="BeforeBuild">
<Copy
Condition="!Exists('App.config')"
SourceFiles="App.config.example"
DestinationFiles="App.config"/>
</Target>
Все это вместе имеет следующий эффект:
- конфигурационный файл с реальными данными никогда не может быть случайно зафиксирован в репозитории, поскольку он игнорируется
- репозиторий содержит только файл конфигурации с данными примера
- если кто-то еще клонирует репозиторий к своей машине, у него не будет "реального" файла конфигурации... но если он отсутствует, он будет автоматически создан до первой сборки Visual Studio/MSBuild, просто скопировав
.example
(а затем он может просто поместить свои реальные данные входа во вновь созданный файлApp.config
). - Если
App.config
с реальными жестко запрограммированными пользовательскими данными уже существует, он не будет перезаписан при создании, потому что событие BeforeBuild произойдет только в том случае, еслиApp.config
уже существует не