On 22/02/18 18:29, Paul Smith wrote:
>
> Hi all. I'm wondering if anyone has any thoughts about the best, or
> even any, way to have "branch properties": some extra information which
> is attached to a branch (that is, the actual branch name not the commit
> it currently points to).
>
> My requirements are that the information needs to be pushed to the
> server, so that lets out branch descriptions for example. Ideally the
> information would also be easily updated and available in all clones
> during normal fetch operations but this isn't a hard requirement: I
> could script it.
>
> My immediate desire is to find a way to mark a branch as "frozen", that
> will control which pushes are allowed. I use gitolite on my server and
> I can easily write a server hook that will handle the checking,
> rejecting, etc. I already have such an infrastructure. What I need is
> a way to know which branches are in that state, so my hook can see that
> and DTRT. There are other "branch properties" I could envision, too,
> but don't have a real need right now.
>
> Of course I could embed the frozen state into the gitolite repository
> configuration. Indeed, I have already implemented "locks" for obsolete
> branches. But "frozen" is a more ephemeral state and requiring access
> to the gitolite repository to manage it is just not what I want; it's a
> separate repository so the state is not visible, requires privileges I
> really don't want to hand out to everyone, and is generally difficult.
> I want some users to be able to manage frozen branches relatively
> easily, and all users to be able to see the state of which branches are
> frozen, etc.
>
> So then I thought about creating a "frozen" tag, like "frozen/v1.0" or
> something. This is slightly weird because it is applied to a commit,
> which is not really right, but whatever: it's just a marker so I would
> just be checking to see if it exists or not. The other problem is that
> Git tags are not intended to be transient/moveable. While you CAN
> delete them and move them, when someone pulls the repository they won't
> get that update by default. Since the hook is server-side the fact
> that the local repository has the wrong information doesn't matter for
> behavior, but it's confusing for people. So, it's not ideal.
>
> I thought about creating a branch, like "frozen/v1.0", rather than a
> tag. I don't need a branch here, and no one would push to that branch
> (I'd have to disallow that in my hooks), and the commit associated with
> the branch would not be relevant most likely. I would only check to
> see if the branch existed, or not. Branches are nice because creating
> and deleting them is handled automatically (if you use prune
> consistently, which we do because we have tons of transient branches).
>
> Then I looked into using notes, and they look interesting, but they're
> associated with a specific commit as well and I don't want that: a
> frozen branch can still have new commits pushed to it they just have
> meet certain criteria. This makes them hard to translate into a branch
> name.
>
> So far, using a special branch name seems the most "reasonable". But,
> I wonder if I missed some cool aspect if Git that would work better, or
> if anyone else has other suggestions.
>
> Cheers!
>
Hi Paul
It would certainly be nice to be able to share branch descriptions so
that if I clone a repository I can get a bit more detail about the ideas
behind each branch. Shared descriptions could be displayed in web uis. I
sometimes find myself wanting something like notes for branches as well
to make a todo list for future commits. Maybe there could be a well
known refs (say refs/metadata) that contains public metadata for other
refs. In the same way that refs/notes/commits contains a tree of commit
ids refs/metadata would contain ref paths without the leaning ref/.
Under than directory there would be a subtree with the metadata - files
called description, frozen, a directory of notes etc. So for
refs/heads/master you'd have refs/metadata/heads/description containing
the description refs/metadata/heads/master/notes/... containing the
notes I want to share and refs/heads/metadata/master/frozen to indicate
if the branch was frozen.
Best Wishes
Phillip