On Sun, Oct 22, 2006 at 10:12:00AM -0700, Linus Torvalds wrote: > [ ... ] > > Again, the way to solve this would tend to be to have a few helper > scripts that use regular file-contents that _describe_ these things to > do "realdiff" and "install". > > In other words, for at least three _totally_ different reasons, you really > don't want to do tracking/development directly in /etc, but you want to > have a buffer zone to do it. And once you have that, you might as well do > _that_ as the repository, and just add a few specialty commands (let's > call them "plugins" to make everybody happy) to do the special things. Damn you stole my idea! I had this scheme brewing in my head too, with some slight variations: > # copy the data, set up a PERMISSIONS file to track extra info > sudo cp /etc/group /etc/passwd /etc/shadow . > sudo chown user:user * > cat <<EOF > PERMISSIONS > group root:root 0644 > passwd root:root 0644 > shadow root:root 0400 > EOF You may want one perms/metadata file per real file (file.meta?) with contents like: owner root group root perms u=r,go= for possibly easier to digest diff output. You could omit "don't care" variables. You could still have one overarching file (DEFAULT.meta) for defaults. Also, you may want to track the implied umask instead of the real perms. You could also track the pathname, (e.g. path /etc/group, path /etc/inet/hosts) so you didn't have to match the structure of the working tree to the actual destination. > And again, I'm not going to even claim that the above two "plugins" are > the right ones (maybe you want other operations too to interact with the > "real" installed files), [ ... ] Yes, there are other very useful transformations possible. One example is to split the /etc/group file into a series of files, each named after the group, with contents the sorted list of members. Again, this is useful for 'diff' and any SCM. It's important that it's a lossless transformation in both directions; you may want to scan the destination and make sure your base revision matches it before 'git install'. > Btw: none of this is really "git-specific". The above tells you how to do > local "git plugins", and it's obviously fairly trivial, but I suspect any > SCM can be used in this manner. Indeed, the essential thing about this is you're representing any system modification as a text diff, so it makes sense for any SCM. In fact the 'plugin' for any SCM would be 95% the same code. This might also be useful for SCMs that don't handle symlinks natively. -- Matt Hannigan - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html