Docker中使用uv结合缓存与Git仓库时出现hardlink different from source错误
Docker环境下uv install从Git仓库安装包失败的排查与解决
报错信息
error: Failed to download and build: `gunicorn @ git+https://github.com/StarfishStorage/gunicorn.git@a5bf38eea1f7642ac092e4a1639e2ccf0f4cf93b` 02:24:37 Caused by: Git operation failed 02:24:37 Caused by: process didn't exit successfully: `git clone --local /root/.cache/uv/git-v0/db/a172a1434ad2fe00 /root/.cache/uv/git-v0/checkouts/a172a1434ad2fe00/a5bf38ee` (exit status: 128) 02:24:37 --- stderr 02:24:37 Cloning into '/root/.cache/uv/git-v0/checkouts/a172a1434ad2fe00/a5bf38ee'... 02:24:37 fatal: hardlink different from source at '/root/.cache/uv/git-v0/checkouts/a172a1434ad2fe00/a5bf38ee/.git/objects/pack/pack-f885b85a815c5038c511818577ead54db50e3281.idx'
问题原因
Docker使用的overlayfs文件系统存在特性:创建指向源文件的硬链接时,源文件的inode可能会因为文件跨文件系统层而发生变化。而Git在执行本地克隆时,会严格校验硬链接与源文件的属性一致性,一旦发现不一致就会拒绝该硬链接并抛出错误。
解决方案
- 重试安装操作:首次创建硬链接后,文件会被移到新的文件系统层,后续再创建硬链接时不会再改变inode,重试
uv install即可成功。 - 修改Git源码(可选):这是Git的一个逻辑瑕疵,可通过在创建硬链接后刷新文件的stat信息来修复,但需要修改Git的源码实现,适合有开发能力的用户尝试。
内容的提问来源于stack exchange,提问作者ddzialak
相关产品推荐
相关产品推荐

