Perhaps something like having each blob refer to an email message.  Each tree would refer to a folder.  Each commit would be made whenever an email is added, deleted, or moved to another folder (though it would not have a reference to a parent).  For indexing, you could refer to each blob with a tag that had a name that corresponds to a UID.  If an email is deleted, then the corresponding tag would be deleted as well.<p>Git&#x27;s garbage collection would eventually remove references to orphaned objects and the transfer protocols would only push (or fetch) objects the other repository doesn&#x27;t have.<p>I don&#x27;t know how it would scale in terms of performance though.