# Can a note be pushed to origin?

4 messages from 2024-09-25 to 2024-09-28. Participants: Stephen P. Smith, Kristoffer Haugsbakk, Jeff King.
Thread: https://gitlist.dev/t/62191

## Stephen P. Smith, 2024-09-25 12:25

Subject: Can a note be pushed to origin?
Message-ID: <20240925122515.14015-1-ishchis2@gmail.com>
URL: https://gitlist.dev/e/20240925122515.14015-1-ishchis2%40gmail.com

```
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, 2024-09-25 15:29

Subject: Re: Can a note be pushed to origin?
Message-ID: <6b69af87-9002-46a7-a5f3-3fa1fb7ba9df@app.fastmail.com>
URL: https://gitlist.dev/e/6b69af87-9002-46a7-a5f3-3fa1fb7ba9df%40app.fastmail.com
In-Reply-To: <20240925122515.14015-1-ishchis2@gmail.com>

```
Hi

On Wed, Sep 25, 2024, at 14:25, Stephen P. Smith wrote:
> 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, 2024-09-27 04:15

Subject: Re: Can a note be pushed to origin?
Message-ID: <20240927041516.GA568026@coredump.intra.peff.net>
URL: https://gitlist.dev/e/20240927041516.GA568026%40coredump.intra.peff.net
In-Reply-To: <6b69af87-9002-46a7-a5f3-3fa1fb7ba9df@app.fastmail.com>

```
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, 2024-09-28 09:52

Subject: Re: Can a note be pushed to origin?
Message-ID: <ca632f1a-c41f-42b3-8f8d-4ef32fe18e33@app.fastmail.com>
URL: https://gitlist.dev/e/ca632f1a-c41f-42b3-8f8d-4ef32fe18e33%40app.fastmail.com
In-Reply-To: <20240927041516.GA568026@coredump.intra.peff.net>

```
On Fri, Sep 27, 2024, at 06:15, Jeff King wrote:
> 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

```
