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

2 messages from 2025-05-25 to 2025-05-26. Participants: Yonatan Roth, Patrick Steinhardt.
Thread: https://gitlist.dev/t/63520

## Yonatan Roth, 2025-05-25 14:13

Subject: ISSUE - Sequential execution failure - Lock auto created between git commands
Message-ID: <CAJR-fbZ4X1+gN75m2dUvocR6NkowLOZ9F26cjBy8w1qd181OoQ@mail.gmail.com>
URL: https://gitlist.dev/e/CAJR-fbZ4X1%2BgN75m2dUvocR6NkowLOZ9F26cjBy8w1qd181OoQ%40mail.gmail.com

```
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, 2025-05-26 13:23

Subject: Re: ISSUE - Sequential execution failure - Lock auto created between git commands
Message-ID: <aDRrO4x0o0Hit6au@pks.im>
URL: https://gitlist.dev/e/aDRrO4x0o0Hit6au%40pks.im
In-Reply-To: <CAJR-fbZ4X1+gN75m2dUvocR6NkowLOZ9F26cjBy8w1qd181OoQ@mail.gmail.com>

```
On Sun, May 25, 2025 at 05:13:30PM +0300, Yonatan Roth wrote:
> 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>

```
