From: "brian m. carlson" <sandals@crustytoothpaste.net>
To: "Никита Поникаров" <nick.ponikarov@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [BUG] branch copy/rename update refs without running the reference-transaction hook
Date: Fri, 2 Oct 2026 19:37:36 +0000 [thread overview]
Message-ID: <asAIAHC_zuHPLljW@fruit.crustytoothpaste.net> (raw)
In-Reply-To: <CAPHjog3wuWOdZS3pHQd20hdZNwA5iXsQMkEfmSnp=NGhLBzuJg@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2126 bytes --]
On 2026-10-02 at 04:12:55, Никита Поникаров wrote:
> Hi,
Hi,
> githooks(5) says the reference-transaction hook "is invoked by any Git
> command that performs reference updates". Some branch copy and rename
> operations update a ref without invoking it.
>
> Observed on git version 2.55.0.windows.5, with the hook registered both
> in .git/hooks and as a config-defined hook (hook.<name>.event).
>
> 1. `git branch -C <src> <dst>` where <dst> exists and is not checked out
> anywhere: <dst> is overwritten with <src>'s value and the hook is not
> invoked in any phase. This happens on both the files and the reftable
> backend. With every documented hook event registered to a logging
> script, none of them fired, and a GIT_TRACE2_EVENT log showed no child
> process.
>
> 2. `git branch -c <src> <dst>` where <dst> does not exist: <dst> is
> created and the hook sees no line for it.
>
> 3. `git branch -m/-M <src> <dst>`:
> - files backend: the hook sees the deletion of <src> and a
> "0000... 0000... refs/heads/<dst>" line, but no line carrying
> <dst>'s new value;
> - reftable backend: no line names <dst> at all, and renaming a branch
> away deletes it without a line for it.
>
> 4. `git reflog delete --updateref --rewrite <branch>@{0}` rewinds the
> branch without invoking the hook, on both backends.
I think there was a recent thread about this at
https://lore.kernel.org/git/CACQ=SRHCOCcmVCgHqd+sjMsZ9LCdSHuXdCo0gkwxXwYgF7iwig@mail.gmail.com/
There were some patches, but they appeared AI generated and were not
picked up. Perhaps you or someone else could send in some
higher-quality patches not using AI (see
Documentation/SubmittingPatches) that could fix the issue.
I will say that using reference transactions to solve this problem would
be very desirable from a variety of perspectives, especially since it
would probably go a long way to unlocking way better performance for
`git remote rename` with many remote-tracking branches as well.
--
brian m. carlson (they/them)
Toronto, Ontario, CA
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 325 bytes --]
prev parent reply other threads:[~2026-10-02 19:37 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-02 4:12 [BUG] branch copy/rename update refs without running the reference-transaction hook Никита Поникаров
2026-10-02 19:37 ` brian m. carlson [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=asAIAHC_zuHPLljW@fruit.crustytoothpaste.net \
--to=sandals@crustytoothpaste.net \
--cc=git@vger.kernel.org \
--cc=nick.ponikarov@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.