git - 在 Ubuntu 上使用 Samba 的 Git:“取消文件链接”
问题描述
我的配置:
Gitlab 上的远程存储库。
带有 git 的 Windows 10 机器(v. 2.25.1.windows.1)
用于本地存储库 (S:) 的 Linux 机器 (Ubuntu) 与 Samba (v. 4.11.6-Ubuntu)
问题
从 Windows 10 计算机 CLI:
git clone -v --recurse-submodules --progress --verbose "https://gitlab.com/my-org/my-project.git" "S:/workspace/my-project/code"
我收到此错误:
POST git-upload-pack (175 bytes)
remote: Enumerating objects: 1591, done.
remote: Counting objects: 100% (1591/1591), done.
remote: Compressing objects: 100% (1259/1259), done.
remote: Total 1591 (delta 318), reused 1543 (delta 270), pack-reused 0
Receiving objects: 100% (1591/1591), 6.60 MiB | 5.46 MiB/s, done.
Resolving deltas: 100% (318/318), done.
Unlink of file 'assets/main/packs/fancybox' failed. Should I try again? (y/n)
故障排除
问题并不总是与同一个目录有关(在本例中:“fancybox”)。但它总是在下载完成后发生(100%)
在我的 Windows 机器上,使用 ProcessExplorer,我看不到任何进程阻止该文件夹。同样,在装有 Samba 的 Linux 机器上也是如此。
这是我的 smbstatus -L:
28971 65534 DENY_NONE 0x120089 RDONLY LEASE(RWH) /home/htdocs workspace/my-project/code/.git/objects/pack/pack-3f0aa70acd802c42ee978f95bc62f61f24dc07d6.idx
28971 65534 DENY_NONE 0x12019f RDWR LEASE(RWH) /home/htdocs workspace/my-project/code/.git/index.lock
28971 65534 DENY_NONE 0x120089 RDONLY LEASE(RWH) /home/htdocs workspace/my-project/code/.git/objects/pack/pack-3f0aa70acd802c42ee978f95bc62f61f24dc07d6.pack
上:
Unlink of file 'assets/main/packs/fancybox' failed. Should I try again? (y/n)
我试图解锁这个锁定的文件夹:
- 为所有存储库分配权限 777
- 杀死关于我的文件夹的 Samba 进程 28971
但是git一直问我是否想再试一次:-(
我还尝试设置有多个调试消息:
GIT_CURL_VERBOSE = 2
但我没有得到我需要的信息。
这个问题发生在我和另一个用户身上。而对另一个同事(相同的配置),从来没有。
在我的办公室里,对于其他一切,网络运行良好:我们在网络上将文件从 Win 复制、移动到 Linux 机器上没有问题。
有什么想法?
解决方案
有点晚了,但我也遇到了这个问题,经过一些横向研究,我发现了这种奇怪行为的(至少一个)原因。
SMB 有一个缓存,其默认设置对于 GIT 来说过于激进,在检出或克隆期间需要创建大量连续文件。请看下面的链接:
尽管本文引用的是旧版本的 Windows,但对于最新的 Windows 10 内部版本,一切仍然有效。
因此,以本地机器和 samba 共享所在机器之间的一些流量增加为代价,GIT 可以以一种稳固而稳定的方式工作。
您可以通过直接创建注册表项来禁用此类缓存:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Lanmanworkstation\Parameters
[DWORD] FileInfoCacheLifetime = 0
[DWORD] DirectoryCacheLifetime = 0
或者通过使用 Powershell Admin
Set-SmbClientConfiguration -DirectoryCacheLifetime 0
Set-SmbClientConfiguration -FileInfoCacheLifetime 0
推荐阅读
- javascript - 用于在 HTML 上为 Web 应用程序实现 PowerPoint 查看器的选项(使用提供的 i-frame 标签嵌入除外)
- c# - BLOB 触发的 Azure 函数中的可选变量
- javascript - 输入字段的React Bootstrap表单样式
- swift - 如何使用协议来表达这个`map`函数
- html - 关闭编译器未检测到脚本标签内的 json
- python - 熊猫中的多级标题问题
- python - 如何在 Keras ImageDataGenerator 中应用 OpenCV 颜色图转换?
- r - 在长格式数据框中标准化日期
- android - Flutter:ios OK,android在启动时崩溃而没有错误
- bash - 与 pre npm 脚本一起使用时如何传递 `--`