"Kristoffer Haugsbakk" <kristofferhaugsbakk@xxxxxxxxxxxx> writes: > 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@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ [2]: https://lore.kernel.org/all/20250902-587-git-fetch-1-fails-fetches-on-case-insensitive-repositories-v1-0-35e69bbb507d@xxxxxxxxx/ > -- > Kristoffer Haugsbakk
Attachment:
signature.asc
Description: PGP signature