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

Re: Git fetch Failure

From
Karthik Nayak <karthik.188@gmail.com>
Date
Sep 2, 2025, 20:28 UTC
Message-ID
<CAOLa=ZQZL3hZE_3ajCAA5=41PZLAVOE=rnPJexu4nPGibNgvRA@mail.gmail.com>
In-Reply-To
<829c6e09-c834-461f-820d-981512a02a76@app.fastmail.com>
"Kristoffer Haugsbakk" <kristofferhaugsbakk@fastmail.com> writes:
Show 69 quoted lines
> On Tue, Sep 2, 2025, at 16:08, Tarun【ツ】 wrote:
>>[snip]
>> What happened instead? (Actual behavior)
>>
>> Git fetch failed with error
>>
>> error: cannot lock ref
>> 'refs/remotes/origin/users/ajya/sqlservermoduleimportM146': Unable to
>> create
>> '/Users/admin/Repos/tasks1/.git/refs/remotes/origin/users/ajya/sqlservermoduleimportM146.lock':
>> File exists.
>>[snip]
>> [System Info]
>>
>> git version:
>>
>> git version 2.51.0
>>
>> cpu: arm64
>>
>> no commit associated with this build
>>
>> sizeof-long: 8
>>
>> sizeof-size_t: 8
>>
>> shell-path: /bin/sh
>>
>> feature: fsmonitor--daemon
>>
>> libcurl: 8.7.1
>>
>> zlib: 1.2.12
>>
>> SHA-1: SHA1_DC
>>
>> SHA-256: SHA256_BLK
>>
>> default-ref-format: files
>>
>> default-hash: sha1
>>
>> uname: Darwin 24.6.0 Darwin Kernel Version 24.6.0: Mon Jul 14 11:30:29
>> PDT 2025; root:xnu-11417.140.69~1/RELEASE_ARM64_T6000 arm64
>>
>> compiler info: clang: 17.0.0 (clang-1700.0.13.3)
>>
>> libc info: no libc information available
>>
>> $SHELL (typically, interactive shell): /bin/zsh
>>
>>
>>
>> [Enabled iHooks]
>
> It looks like a casing issue caused by `default-ref-format: files`.
>
> ```
> $ git for-each-ref --format='%(refname)' | grep -i sqlServerModuleImportM146
> refs/remotes/origin/users/ajya/sqlServerModuleImportM146
> refs/remotes/origin/users/ajya/sqlservermoduleimportM146
> ```
>
> You could try
>
> ```
> $ git clone --ref-format=reftable https://github.com/microsoft/azure-pipelines-tasks.git
> ```
>

Yeah, so the issue is that using the files backend on case-insensitive filesystems breaks since there are conflicts due to references with only case difference. Before 2.51 we would simply overwrite one reference with the other _silently_. With 2.51 we use a single transaction for reference update and this breaks.

There was another report similar to this [1] and I've also pushed patches to overcome this issue [2]. But with the files backend, there will always be a compromise.

So like Kristoffer suggested, the best path is to use the reftable backend, which can handle different cases in references.

[1]: https://lore.kernel.org/all/YQXPR01MB3046197EF39296549EE6DD669A33A@YQXPR01MB3046.CANPRD01.PROD.OUTLOOK.COM/ [2]: https://lore.kernel.org/all/20250902-587-git-fetch-1-fails-fetches-on-case-insensitive-repositories-v1-0-35e69bbb507d@gmail.com/

> --
> Kristoffer Haugsbakk
Previous: Kristoffer Haugsbakk
Message 3 of 3 in “Git fetch Failure”
  1. Tarun【ツ】Sep 2, 2025
  2. Kristoffer HaugsbakkSep 2, 2025
  3. Karthik NayakSep 2, 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.