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

Question about `git gc` locking files

From
Calvin Wan <calvinwan@google.com>
Date
Oct 21, 2024, 22:55 UTC
Message-ID
<CAFySSZBCKUiY5DO3fz340a0dTb0zUDNKxaTYU0LAqsBD2RMwSg@mail.gmail.com>

Recently, after upgrading to 2.47.0, we had internal reports of users erroring out with:

fatal: cannot lock ref 'HEAD': Unable to create '<filepath>/.git/HEAD.lock': File exists.

We believe this is due to "(98077d06) run-command: fix detaching when running auto maintenance", since we have neither `gc.autoDetach` nor `maintenance.autoDetach` set. When this bug was fixed, the maintenance runs that triggered during usage of the external tool, repo[1], would lock the HEAD file in the Android manifest repository thereby erroring out `repo`. Additionally, long running maintenance tasks would also cause users to frequently run into this issue when using git commands that are written to HEAD.

We can fix this easily temporarily by pushing out config changes to run in the foreground, however, I was under the impression that `git gc`, whether invoked normally or through `git maintenance`, would be able to run in parallel with other git commands and therefore not lock. There is no mention of this in the documentation for `git gc`, but I do see it in the `git maintenance` documentation. So should `git gc` be locking the HEAD file in the first place? And if so, is there a way for `git gc` to have less of a dependence on HEAD.lock?

Thanks, Calvin

[1] https://gerrit.googlesource.com/git-repo
Next: Patrick Steinhardt
Message 1 of 4 in “Question about `git gc` locking files”
  1. Calvin WanOct 21, 2024
  2. Patrick SteinhardtOct 22, 2024
  3. Taylor BlauOct 22, 2024
  4. lilydjwgMar 1, 2025

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.