threads / discuss / 63520

ISSUE - Sequential execution failure - Lock auto created between git commands

Subject: ISSUE - Sequential execution failure - Lock auto created between git commands

## tl;dr

2 messages between May 25, 2025 and May 26, 2025.

replies: 1people: 2as markdown or json

Yonatan Roth· May 25, 2025, 14:13 UTC · lore
Hi,
Using a script we run the following set of git commands:
git branch -a
git remote -v
git stash push --all --include-untracked
git checkout test_git_ver
git remote -v
git fetch
git status --branch --porcelain=v1 -u
git checkout test_git_ver_workspace

After upgrading the git version to - *2.47.2*, we started getting the following error:

error: cannot lock ref 'HEAD': Unable to create '.../.git/*HEAD.lock*': File exists.

Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.
fatal: unable to update HEAD

Investigating the issue on our side, we found that the failure occurs when running the last command - git checkout test_git_ver_workspace.

As well, we noticed that after the "git fetch" command there is an *auto * *maintenance* execution, it looks like there was a change between git versions and now there is an additional flag *--detach *added to maintenance. Therefore, we suspect that as a result of git fetch a maintenance detached (background) process is created, running in parallel to the general script, creating a lock file that fails the script.

Attached trace logs.

This script was running for multiple versions without any issue, it looks like the changes introduce a *regression*.

Please assist in resolving the issue.

Best regards, Yonatan Roth Palo Alto Networks

Trace logs:
12:54:52.400869 run-command.c:666       trace: run_command: git rev-list --objects --stdin --not --exclude-hidden=fetch --all --quiet --alternate-refs
12:54:52.400936 run-command.c:758       trace: start_command: /usr/local/libexec/git-core/git rev-list --objects --stdin --not --exclude-hidden=fetch --all --quiet --alternate-refs
12:54:52.483329 run-command.c:1534      run_processes_parallel: preparing to run up to 1 tasks
12:54:52.483384 run-command.c:1561      run_processes_parallel: done
12:54:52.483395 run-command.c:666       trace: run_command: git maintenance run --auto --no-quiet --detach
12:54:52.483475 run-command.c:758       trace: start_command: /usr/local/libexec/git-core/git maintenance run --auto --no-quiet --detach
12:54:52.494826 git.c:479               trace: built-in: git maintenance run --auto --no-quiet --detach
Patrick Steinhardt· May 26, 2025, 13:23 UTC · re: Yonatan Roth · lore

Re: ISSUE - Sequential execution failure - Lock auto created between git commands

On Sun, May 25, 2025 at 05:13:30PM +0300, Yonatan Roth wrote:
Show 29 quoted lines
> Hi,
> 
> 
> Using a script we run the following set of git commands:
> 
> git branch -a
> 
> git remote -v
> 
> git stash push --all --include-untracked
> 
> git checkout test_git_ver
> 
> git remote -v
> 
> git fetch
> 
> git status --branch --porcelain=v1 -u
> 
> git checkout test_git_ver_workspace
> 
> 
> 
> 
> After upgrading the git version to - *2.47.2*, we started getting the
> following error:
> 
> error: cannot lock ref 'HEAD': Unable to create '.../.git/*HEAD.lock*':
> File exists.

This sounds similar to the issue reported in [1], please see my reply there. I'll send a patch series the over the next days to address the issue.

Patrick
[1]: <CANi7bVAkNc+gY1NoXfJuDRjxjZLTgL8Lfn8_ZmWsvLAoiLPkNg@mail.gmail.com>

← back to recent threads