在 docker 中使用“uv”与缓存和 git 存储库失败,并显示“硬链接与源不同”

问题描述 投票:0回答:1

这只是为将来遇到同样问题的人提供的报告。

我花了很多时间来调查为什么在从 git 安装软件包时“uv install”在 docker 中失败。问题表现是:

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'

创建硬链接成功,但因为底层文件系统是overlayfs,然后创建指向

dest_path
的硬链接
src_path
可能会导致
src_path
会改变它的inode(因为它会出现在不同的fs层)。因此 git 拒绝这样的硬链接,因为它需要具有相同的属性: https://github.com/git/git/blob/master/builtin/clone.c#L405

恕我直言,这是“git”中的小错误,可以通过创建硬链接后刷新统计值

iter->st
来解决。

重试“关闭”也可以解决问题,因为一旦创建硬链接,就会导致硬链接文件出现在新的 fs 层中,并且稍后创建硬链接不会更改 inode。

git docker caching uv
1个回答
0
投票

可以通过

uv
选项
export UV_CACHE_DIR=copy
export UV_CACHE_DIR=symlink
来解决,但它也会带来后果。

我的选择是在创建 docker 镜像后删除

/root/.cache/uv/git-v0
目录。

© www.soinside.com 2019 - 2024. All rights reserved.