This question has more to do with the structure and access of different configurations across a number of levels of development. What I mean by 'levels of development' is environments where the different versions of the code and product live. This can be things like a 'Development' branch, 'Quality' branch, or any of the different 'Production' or 'Release' areas.
We have a number of services that we're creating around a Java VM. Outside of Java, we're specifying a config file that the JAR parses for things like SQL server location, username, and password. We'll need this config file to be different for each environment we have as it goes up through promoting/merging the code through the development process, going from Development to Staging to Quality, etc. since each instance of SQL server will have its own IP address, name, and login information. The structure of each config file may even be different from one another - though it would still be parseable by the JAR.
Since all of this needs to happen, we are left thinking about what the best solution might be. We can't keep the config file in the source control repository (using Git right now) with the rest of the code, because it needs to be different from server to server. Plus, any configuration change that needs to happen should not be a full push/pull and rebuild from that server.
What are some 'best practice' ways of doing this? One idea we looked at was having a separate source control location just for the config files, but that's still undesirable to us.