threads / discuss / 62191

Can a note be pushed to origin?

Subject: Can a note be pushed to origin?

## tl;dr

4 messages between Sep 25, 2024 and Sep 28, 2024.

replies: 3people: 3as markdown or json

Stephen P. Smith· Sep 25, 2024, 12:25 UTC · lore

In a project that I am working on, some metadata is currently embedded in some source files. The question was asked yesterday if there is a way to move that metadata a git specific file and link it to the source file or commit.

I remembered that git has notes which can be used to add such data to a commit, but I don't believe that such metadata gets pushed to origin nor fetched from origin but another user.

Is there a currently implemented way to do something like this?
Kristoffer Haugsbakk· Sep 25, 2024, 15:29 UTC · re: Stephen P. Smith · lore

Re: Can a note be pushed to origin?

Hi
On Wed, Sep 25, 2024, at 14:25, Stephen P. Smith wrote:
Show 9 quoted lines
> In a project that I am working on, some metadata is currently embedded in some
> source files.  The question was asked yesterday if there is a way to move that
> metadata a git specific file and link it to the source file or commit.
>
> I remembered that git has notes which can be used to add such data to a
> commit, but I don't believe that such metadata gets pushed to origin nor
> fetched from origin but another user.
>
> Is there a currently implemented way to do something like this?
You have to do it manually.
In `.git/config`:
```
[remote "origin"]
	url = <url>
        […]
	fetch = refs/notes/commits:refs/notes/commits
```
That fetches the default Notes ref on `git fetch origin`.

That will refuse to update if your own notes ever diverge from the remote. If you want to always overwrite your local notes with the remote ones:

```
[remote "origin"]
	url = <url>
        […]
	fetch = +refs/notes/commits:refs/notes/commits
```
But then you should also enable reflog updates for all refs:

``` git config set --global core.logAllRefUpdates always ```

In case you do a fetch that you want to undo.
-- 
Kristoffer Haugsbakk
Jeff King· Sep 27, 2024, 04:15 UTC · re: Kristoffer Haugsbakk · lore

Re: Can a note be pushed to origin?

On Wed, Sep 25, 2024 at 05:29:30PM +0200, Kristoffer Haugsbakk wrote:
> That will refuse to update if your own notes ever diverge from the
> remote.  If you want to always overwrite your local notes with the
> remote ones:

There are some specialized strategies for merging notes (e.g., taking the union of lines). See the "merge" subcommand in git-notes(1).

I don't recall ever really using it myself, and I don't think there's really any porcelain support, so you're on your own to invoke the merge. But I guess the use case would be something like:

  # fetch their notes into a holding spot
  git config remote.origin.fetch refs/notes/commits:refs/notes/origin/commits
  # and then after every fetch, you merge if necessary. By default we're
  # merging into our own "refs/notes/commits". And it should be OK to
  # use the short "origin/commits" here, since notes-refs have their own
  # special lookup rules. Though using the fully qualified refname is
  # probably reasonable, too.
  git fetch
  git notes merge -s union origin/commits
-Peff
Kristoffer Haugsbakk· Sep 28, 2024, 09:52 UTC · re: Jeff King · lore

Re: Can a note be pushed to origin?

On Fri, Sep 27, 2024, at 06:15, Jeff King wrote:
Show 23 quoted lines
> On Wed, Sep 25, 2024 at 05:29:30PM +0200, Kristoffer Haugsbakk wrote:
>
>> That will refuse to update if your own notes ever diverge from the
>> remote.  If you want to always overwrite your local notes with the
>> remote ones:
>
> There are some specialized strategies for merging notes (e.g., taking
> the union of lines). See the "merge" subcommand in git-notes(1).
>
> I don't recall ever really using it myself, and I don't think there's
> really any porcelain support, so you're on your own to invoke the merge.
> But I guess the use case would be something like:
>
>   # fetch their notes into a holding spot
>   git config remote.origin.fetch refs/notes/commits:refs/notes/origin/commits
>
>   # and then after every fetch, you merge if necessary. By default we're
>   # merging into our own "refs/notes/commits". And it should be OK to
>   # use the short "origin/commits" here, since notes-refs have their own
>   # special lookup rules. Though using the fully qualified refname is
>   # probably reasonable, too.
>   git fetch
>   git notes merge -s union origin/commits

git-notes(1) feels like the most “plumbing” command out of the “main porcelain commands”. :) (of those that I use)

For my needs though it is high level enough since I mostly add notes to my own commits. Certainly porcelain in that sense. I use it all the time to add testing/general comments to my commits.

-- 
Kristoffer Haugsbakk

← back to recent threads