Re: [PATCH v3 2/6] notes: replace pseudorefs with real refs
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jul 28, 2015, 22:52 UTC
- Message-ID
- <xmqqpp3bc2u6.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <CALKQrgdLC_sLkM3jyH6pnDoY+RTHr9wJR_VH6iirBWmvyHYcVA@mail.gmail.com>
Johan Herland <johan@herland.net> writes:
Johan Herland <johan@herland.net> writes:
> However, in any case, notes merges are always per _repo_ and never per > _worktree_, so this is all unrelated to the current patch/discussion > AFAICS.
Thanks for chiming in, but I actually think you are confused.
"git merge" is always per _repo_ in the sense that the result of a merge of a topic to the 'master' is recorded in the 'master' which is per-repo. In the multi-worktree world order, that does not change. What changes is that you could have different worktrees that check out different branches. Worktree A may have 'master' checked out and do the merge there to update the tip of 'master'. But while worktree A is doing that, worktree B may have 'next' checked out and do an unrelated merge there. Once worktree A leaves 'master' by checking out another branch, worktree B is free to check out 'master' and do further merges there. Merging into 'master' is per _repo_, but the act of merging is per worktree.
I think merges of refs/notes/commits and refs/notes/someotherthing works exactly the same way. In worktree A, you may decide to merge a notes tree refs/notes/commits with somebody else's. It may conflict and you may need to "lock" refs/notes/commits from being touched by other worktrees while resolving that, but that does not mean other worktrees cannot do a merge of refs/notes/someotherthing at all. The temporary area you use for merging notes, i.e. the working tree as far as notes merge is concerned, is private to worktree A and does not need to be seen by other worktrees.
So while you are working on merging and resolving, that intermediate state is *NOT* per _repo_ at all. It is at most per worktree (Yes you could extend and have one notes_merge_ref per each refs/notes/* ref to make it even finer grained to allow more than one notes merge going on inside a single worktree, but I do not think it is worth it).