我在 Windows Server 2019 构建代理上有一个文件夹,我们将其称为机器 A。我在该文件夹中的 NTFS 上创建一个符号链接,该链接指向另一台远程计算机上的文件夹,我们将其称为机器 B。
当检出 git 存储库时,我将其检出并指定符号链接作为我想要将其检出的文件夹(在机器 B 上是空的)。
但是,我得到的错误是,fatal: failed to stat <insert symbolic link path here> Permission denied
然后 Git 继续删除该文件夹,并将其检出到非链接文件夹。
由于 Git 显然具有在机器 A 上的工作文件夹中写入的权限,因此我的第一个想法是使用 Powershell,获取机器 A 上工作文件夹的 ACL,并用工作文件夹的 ACL 覆盖符号链接 ACL。
那没有用,有什么想法吗?
答案1
您没有提到您使用的是哪种操作系统,但通过提到 NTFS,我假设它是 Windows。
Git 需要能够调用stat(2)
符号链接上的函数的等效函数,因为它需要知道 (a) 它是否是文件夹以及 (b) 它是否为空。如果不是这两个条件,它应该打印错误并失败,而不是让您克隆到它。
在 Windows 上,等效函数是GetFileAttributesExW
,并且根据 Git 源代码,您将获得ERROR_ACCESS_DENIED
、ERROR_SHARING_VIOLATION
、ERROR_LOCK_VIOLATION
或之一ERROR_SHARING_BUFFER_EXCEEDED
。本质上,您缺乏某种权限来读取有关该链接的元数据,或者存在某种共享问题。
如果您弄清楚了问题是什么,Git 很可能对您有用,因为它在 Unix 系统上确实有效。但是,Microsoft 没有记录特定错误对于给定函数的含义,因此您只能自己弄清楚。您可以尝试确保您对链接的父目录以及目标(远程)文件夹具有足够的权限。请注意,除了写入权限之外,您可能还需要相当于 Unix 读取和搜索权限。