Look into combining git and puppet for deployment model. While git can work directly it is painful (IMHO).
The templates in puppet work extremely well for configuration files that vary by system. The templates files option works well for static deployed content.
There are at least two often used models in this case. Git can be used to deploy most of your content from a single repository and a second configuration only git repository of puppet configuration files are used for per server content.
It is also possible to keep both the content and configuration files in the same repository but it might take some workflow changes for that to work well.
I'm most familiar with Puppet but my understanding is that Chef and cfengine both provide similar functionality.
When using git & puppet together files one extremely useful feature is mapping git branches to individual environments. It makes it easy to transition from QA to prod, even for your config files.