Subject: Re: Metadata and checkin file date

From: Jakub Narebski <[email-masked]>
Date: Tue, 27 Apr 2010 22:55:47 +0200

On Tue, 27 Apr 2010, Gerhard Wiesinger wrote:
> On Tue, 27 Apr 2010, Jakub Narebski wrote:
>> Gerhard Wiesinger <[email-masked]> writes:
>>
>>> I'm new to git and I'm looking for the following features:
>>> 1.) Metadata for
>>>    a.) directory versioning (e.g. add/rm, mv)
>>>    b.) rights (basic: chmod, chow, chgrp, extended: extended
>>> attributes like ACLs and selinux), necessary for versioning e.g. /etc
>>> 2.) Original file dates (checkin date) on clone and pull (and not
>>> checkout date)
>>>
>>> Is this possible? Any plans if missing?
>>
>> Git is distributed version control system (DVCS), not a backup system.
>> It is used mainly for distributed development of programs.  Therefore
>> it supports natively only those parts of metadata that make sense for
>> VCS, namely symlinks (with workaround for filesystems that do not have
>> support for symbolic links) and the executable permission for files.
>>
>> File ownership does not make sense for VCS, as other people that clone
>> your repository do not have the same set of users that you have, and
>> might not have the same set of groups that you have.  Neverthemind that
>> their filesystem might not support notion of file ownership, not only
>> do not have support for extended attributes and the like.
> 
> I would suggest that only with special switches like --preserve-chmod 
> --preserver-owner --preserve-group , etc. where one can guarantee user, 
> groups, etc. See also my second post for arguments.

Do *one* thing, and do it well.

Note that in 'tree' object (used to represent directories, and holding
names and executable permission of files) there is simply no place for
full ownership, for timestamp(s), for extended attributes.  And changing
repository format for such minor fringe usage is out of the question for
Git.

So you would have to use some .gitmetadata file to store additional
metadata.  And then you can utilize hooks mechanism, i.e. add this
functionality to extra tool like etckeeper or IsiSetup, just like patch
management is done with extra tools like StGit, Guilt or TopGit.

>> If you really, really need this, you can use additional tools to
>> preserve metadata, like Metastore or git-cache-meta, or even ready
>> tools that use Git as bckend like IsiSetup or bup (well, bup use
>> git package format, not git itself...), see this Git Wiki page:
>> https://git.wiki.kernel.org/index.php/InterfacesFrontendsAndTools
> 
> Will have a look at them.

-- 
Jakub Narebski
Poland