Under Gentoo the tool to manage package-induced changes to /etc (called dispatch-conf) supports rcs to track changes but that isn't really powerful.
I tend to version my /etc via git, especially since by using different branches I can keep my /etc as similar as possible over different distributions as possible while keeping as much stuff in one place as possible (for some areas that obviously fails, apache configuration for example is really different across different distributions). It works like this:
I have my master repo with my default configuration files.
Now I come in touch with a new distro so I create a new branch based on my master branch based on the distribution's name (in this example debian).
Debian keeps some config file in a location different from my master so I do a git mv file new_loc. And everything is fine.
I switch back to master and change that file because I added some specific config directive.
When I merge master into my debian branch the moved file is changed, so I can basically just change most things within my master branch and just have to merge changes in my "distribution" branches (usually they tend to be more of a mix of distribution and purpose branches, a debian server has some differences to a debian workstation obviously but the features still work).
So basically I have a "generic configuration" in master and (to say it in object-oriented programming terms) inherit those into my branches (who also can inherit from each other).
Apart from that, git's mechanisms to "cherry-pick" commits (in this case changes to /etc/) has been quite helpful to me at times where I only needed parts of a certain configuration.
Now to some of your ideas:
- If I needed more package manager integration I would probably use wrapper scripts for this (at the moment I don't).
- treating upstream versions as a branch would work fine with
git, it's just another branch that you sometimes merge (partially) into master
- The ignore list in git is the file
.gitignore in your repo so that is covered.