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
- The ignore list in git is the file .gitignore in your repo so that is covered.