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

[RFC PATCH 0/3] Improve error reporting to mention "why" a directory is not a repository

From
Kaartic Sivaraam <kaartic.sivaraam@gmail.com>
Date
Sep 24, 2026, 12:02 UTC
Message-ID
<20260924120502.2642141-1-kaartic.sivaraam@gmail.com>

At the moment, there are a few scenarios where the error message for an invalid Git repository is a bit blunt. For instance, when we point GIT_OBJECT_DIRECTORY at a directory that does not exist, we get this:

  $ GIT_OBJECT_DIRECTORY=/does/not/exist git --git-dir repo.git rev-parse --is-bare-repository
  fatal: not a git repository: 'repo.git'

Even though repo.git itself is a valid repository, we get this rather puzzling error saying that it is not. The actual problem is the invalid value given to GIT_OBJECT_DIRECTORY, and the user is left on their to figure that out. This series aims to make such issues easier to diagnose by saying why the specified repository was not considered valid.

With this series, the same command outputs:
  $ GIT_OBJECT_DIRECTORY=/does/not/exist git --git-dir repo.git rev-parse --is-bare-repository
  fatal: not a git repository: 'repo.git'
  reason: cannot access object directory '/does/not/exist' set via $GIT_OBJECT_DIRECTORY
The following scenarios are covered when --git-dir is given explicitly:
  - HEAD is missing, or its path is not traversable
  - HEAD is a symlink that cannot be read
  - HEAD is a symlink whose target lives outside refs/
  - HEAD cannot be opened, or cannot be read
  - HEAD contains neither a ref under refs/ nor an object ID
  - $GIT_OBJECT_DIRECTORY is set to something we cannot access
  - the object directory in the common directory is inaccessible
  - the refs directory in the common directory is inaccessible
This series does not yet report a reason in the following cases.

The discovery walk, where we iterate up to the ceiling or the mount point looking for a repository:

  $ GIT_OBJECT_DIRECTORY=/does/not/exist git rev-parse --is-bare-repository
  fatal: not a git repository (or any parent up to mount point /)
  Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)

The gitfile case, for instance when run from inside a submodule / worktree:

  $ GIT_OBJECT_DIRECTORY=/does/not/exist git rev-parse --is-bare-repository
  fatal: gitfile does not point to a valid repository: /path/to/super/sub/.git

GIT_ALTERNATE_OBJECT_DIRECTORIES is also left alone. Its diagnostic are misleading in their own way, but they are emitted much later, from the object database rather than from setup, so they need a separate treatment.

I would be very interested in hearing what others think about this direction. If it looks reasonable, I'm happy to cover the remaining cases too, either in this series or separately.

Kaartic Sivaraam (3):
  t0009: add tests to cover more error reporting scenarios
  setup: introduce new helper 'is_git_directory_verbose'
  setup: communicate why a directory is not a valid git directory
 setup.c                       | 165 +++++++++++++++++++++++++---------
 t/t0009-git-dir-validation.sh |  38 ++++++++
 2 files changed, 161 insertions(+), 42 deletions(-)
-- 
2.56.0.rc1.12.g2c9c8d64bb
Next: Kaartic Sivaraam
Message 1 of 20 in “Improve error reporting to mention "why" a directory is not a repository”
  1. 0/3 Improve error reporting to mention "why" a directory is not a repositoryKaartic Sivaraam, Sep 24, 2026
  2. 1/3 t0009: add tests to cover more error reporting scenariosKaartic Sivaraam, Sep 24, 2026
  3. 2/3 setup: introduce new helper 'is_git_directory_verbose'Kaartic Sivaraam, Sep 24, 2026
  4. 3/3 setup: communicate why a directory is not a valid git directoryKaartic Sivaraam, Sep 24, 2026
  5. Junio C HamanoSep 24, 2026
  6. Junio C HamanoSep 24, 2026
  7. Junio C HamanoSep 24, 2026
  8. Kaartic SivaraamSep 25, 2026
  9. Kaartic SivaraamSep 25, 2026
  10. Kaartic SivaraamSep 25, 2026
  11. 1/4 setup: normalize an if-else to follow our conventionKaartic Sivaraam, Sep 29, 2026
  12. 0/4 Improve error reporting to mention "why" a directory is not a repositoryKaartic Sivaraam, Sep 29, 2026
  13. 2/4 t0009: add tests to cover more error reporting scenariosKaartic Sivaraam, Sep 29, 2026
  14. 3/4 setup: introduce new helper 'is_git_directory_verbose'Kaartic Sivaraam, Sep 29, 2026
  15. 4/4 setup: communicate why a directory is not a valid git directoryKaartic Sivaraam, Sep 29, 2026
  16. Patrick SteinhardtSep 30, 2026
  17. Patrick SteinhardtSep 30, 2026
  18. Junio C HamanoSep 30, 2026
  19. Kaartic SivaraamOct 5, 2026
  20. Kaartic SivaraamOct 5, 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.