Subject: [RFC] Hidden refs

From: Marc Branchaud <[email-masked]>
Date: Wed, 13 Oct 2010 11:22:11 -0400

Hi all,

We want to have our build system record, in our repo, which commits
correspond to which builds.

Nominally, this is a job for tags.  But we don't want to have to look at
these tags all the time.  We particularly just want to tag the repo when we
make an actual release -- tags are a Big Deal for us.

Notes are an option, though they feel a bit heavy for this application.  And
although we can store the build notes in their own refspace, it would (I
believe) be a little clunky to make commands like checkout and log work with
the commits that were noted by the build system.

It struck me that it would be neat to have hidden refs in the refs/
directory.  I experimented a bit with a "refs/.builds" directory:

* "git update-ref refs/.builds/One" fails with "Cannot lock the
  ref 'refs/.builds/One'."  So I created a ref the regular way
  (refs/blah/One) and copied the "One" file into refs/.builds/.

* Commands like show, checkout, and log all worked fine with
  "refs/.builds/One"

* "git show-ref" ignores the entries in refs/.builds/.

* So the .builds/ refs don't show up in gitk -- yay!

* "git push origin +refs/.builds/One fails with "remote part of refspec is
not a valid name in +refs/.builds/One".

* Completion in bash doesn't work with entries in refs/.builds/.

So I'm wondering if it makes sense to properly support hidden directories in
refs/, and what it would take to do so.  (I image, for example, that things
would behave quite differently on Windows...)

Thoughts?

		M.