How can I put my Windows personal configuration under version control?
Summary (details and examples follow):
- Personal configuration (e.g. desktop preferences), not system configuration (e.g. drivers); should work without admin rights
- Version control, not backups or disk imaging
Here are a few things I want to be able to do:
- Commit the current state of my configuration to a repository, preferably with some granularity (if I've made two changes, I'd like to be able to commit one without commit the other).
- Write a changelog entry whenever I commit, and see the list of changelog entries for each configuration file.
- See the differences between the current state and a repository version.
- Check out from my repository on a new Windows machine and reproduce my configuration (at least if the new machine has the same version of Windows).
<added1> I won't try to give a completely precise definition of “configuration”; I'm trying to cover all kinds of personal preferences (e.g., anything settable in the control panel without admin rights, shortcuts in my user-specific “Programs” menu, …). I don't want to include my documents or installed applications. </added1>
<added2> Note that I'm targetting my personal configuration, not the system configuration (that would be useful too, but it's not the purpose of this question). For instance I expect a solution to work without admin rights. </added1>
What I do in unix is to put (a selection of) my dot files under version control. Under Windows, I presume I should commit the registry and some files (which?) under
Application Data. I would like something better than putting the whole registry file under version control (that's not enough granularity, and I fear locking issues). <added1> Ideally I would use wrappers or scripts with some common version control software (Bazaar, CVS, Darcs, Git, Mercurial, Subversion, …), but that's not an absolute requirement. </added1>
I currently need to work with Windows 2000 and Windows XP. Since this is for a work machine, payware won't do (open source would be ideal). I'm more comfortable with the command line than with GUIs.
<added1> Here's a sample workflow:
- One day I decide I want my desktop background to be pink. So I make the change through the GUI. This modifies a
line in a configuration filekey in the registry. I then commit the change, to keep track of it.
- Later I wonder why my desktop background is pink. So I search for “desktop color” in the changelog.
- One day I need to use a new machine. So I check out from my configuration repository, and voilà, pink desktop.
Here are some things I'm not trying to do:
I am not trying to make backups. I want to be able to trace changes (by semantics, or at least syntax, not just by date), and to share information between machines (one repository, multiple checkouts).
I am not trying to replicate a Windows installation. I don't want to carry over hardware dependencies, installed applications, or documents.