Вы можете сделать это с помощью SVN.
Если вы извлекаете файл из библиотеки и вносите в него изменения, а затем делаете «обновление», вы получаете новую копию файла из библиотеки с примененными к ней изменениями. Я регулярно использую это для файлов конфигурации.
Это не совсем то, что вы описываете, потому что каждый раз, когда вы делаете коммит, вам нужно исключить файл конфигурации. Я полагаю, если вы забудете сделать это в какой-то момент, вы обновите репозиторий своими локальными изменениями и вызовете горе у всех.
И когда вам нужно изменить «публичную» часть файла конфигурации, вы должны выполнить отдельную проверку, чтобы вы могли отделить «публичные» изменения от «локальных» изменений.
Я бы также одобрил схемы, описанные Крисом Марисиком. У меня есть несколько веб-приложений, в которых я создал несколько файлов конфигурации, и программа динамически решает, какое из них использовать в зависимости от среды.
В одном случае файл конфигурации содержит пути к внешним файлам, и я работал как с сервером Windows, так и с сервером Linux, поэтому имена путей различны. Поэтому я в итоге создал «Конфигурацию Linux» и «Конфигурацию Windows», а затем выбрал в зависимости от того, под какой ОС я работал.
В другом случае программа при запуске проверяет имя контекста сервлета (это приложение JSP / servlet), а затем ищет файл с именем "WEB-INF / .properties". Если он не находит это, он загружает имя по умолчанию. Затем я запускаю версию для разработки под другим контекстным именем, отличным от рабочей версии, и каждая автоматически выбирает правильный файл конфигурации.