git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [RFC] Optional per-repository consent before running local hooks

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Sep 29, 2026, 21:32 UTC
Message-ID
<arwubFmKkRcbbto3@fruit.crustytoothpaste.net>
In-Reply-To
<CAF1QGTmK=WY_AODsfETOtzOSuwpZ_4KV5SiNPoRv0SAYeJ7T5A@mail.gmail.com>
On 2026-09-29 at 04:23:43, Dmytro Lymarenko wrote:
Show 5 quoted lines
> I’d like to propose an optional safety setting for Git hooks. When
> enabled, Git would check for an active hook before running it in a
> repository that the user has not approved. It would show the hook’s
> path and ask whether to run it once, trust the current hooks for this
> repository, or decline.

In addition to what Junio said, we need to consider what happens if Git operates noninteractively. For instance, a CI system or a Docker container.

Show 5 quoted lines
> This would help when a tool or setup step installs hooks from files
> supplied by a project. The check should happen immediately before
> execution, so it also covers hooks installed after a repository was
> cloned. For scripts inside the working tree, Git should ask again if
> the approved script changes.

I agree this is undesirable behaviour from a project and I typically consider installing hooks or other external software from the repository without the user's consent to be malicious. Installing hooks from things like Git LFS I consider less of a problem because I have installed that software and configured it on my system, so I presumably want that behaviour.

The problem also becomes where to store this information because Git doesn't have any sort of data store to store per-user information other than the config file and as Junio mentioned, if the repository can install hooks, it can also set config.

What may be kind of equivalent is to set `core.hooksPath` to `/dev/null` in the global config and then choose to set it to `hooks` or `.git/hooks` in the local config if you want that. Or you can do the reverse and use `core.hooksPath=/dev/null` in the local config for poorly behaved repositories. Of course, the repo can override that, but if it does that, then I'd just report it as malicious to its hosting provider.

-- 
brian m. carlson (they/them)
Toronto, Ontario, CA
Previous: Junio C Hamano
Message 3 of 3 in “[RFC] Optional per-repository consent before running local hooks”
  1. Dmytro LymarenkoSep 29, 2026
  2. Junio C HamanoSep 29, 2026
  3. brian m. carlsonSep 29, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.