On Saturday 06 February 2010, Jon Seymour wrote: > git notes is a nice innovation - well done to all those involved. Thanks. > Has consideration ever been given to generalizing the concept to allow > note (or more correctly - metadata) trees with arbitrary sha1s? Not sure what you mean here. The note infrastructure allows _any_ SHA1 (not necessarily the SHA1 of an existing Git object) to be bound to a note object. Furthermore, although we currently assume that all note objects are blobs, someone (who?) has already suggested (as mentioned in the notes TODO list) that a note object could also be a _tree_ object that can be unpacked/read to reveal further "sub-notes". Hence, in addition to having multiple notes refs (e.g. refs/notes/commits:deadbeef, refs/notes/bugs:deadbeef, etc.) to categorize notes, you could also classify notes _after_ having traversed the notes tree (e.g. refs/notes/bugs:deadbeef/fixes, refs/notes/bugs:deadbeef/causes). Note that support for this has not yet been written, and AFAIK it is also uncertain how such a change would affect the different use cases for notes (e.g. how to display them in 'git log') > For example, suppose you had reason to cache the distribution that > resulted from the build of a particular commit, then it'd be nice to > be able to do this using a notes like mechanism. > > git metadata import foo-1.1.0 dist ~/foo/dist > > would create a git tree from the contents of ~/foo/dist and then bind > it to meta item called dist associated with the sha1 corresponding to > foo-1.1.0 You can do this already today by simply using 'git tag': # Prepare an index with the contents of ~/foo/dist git tag foo-1.1.0-dist $(git write-tree) I don't see why you'd need to add a new metadata command. > To retrieve the contents of the previous build, you'd do something like > > get metadata export foo-1.1.0 dist /tmp/foo-1.1.0 > > This would find the metadata tree associated with foo-1.1.0, extract > the dist subtree from that tree and write it to disk at /tmp/foo-1.1.0 Or, if you use a tag instead: git --work-tree=/tmp/foo-1.1.0 checkout foo-1.1.0-dist > I've used build outputs as an example here, but really it needn't be > limited to that. I can see this facility would be useful for any kind > of annotation or derived result that is more complex than a single > text blob. Metadata trees in combination with a name spacing > technique, could be used to store arbitrary metadata created by an > arbitrary set of tools to arbitrary SHA1 objects. I still don't see why this provides anything that isn't already supported by either using 'git tag', or by implementing support for notes-as-trees in the notes feature. ...Johan -- Johan Herland, <johan@xxxxxxxxxxx> www.herland.net -- 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