【问题标题】:Git with Samba on Ubuntu: "Unlink of file"在 Ubuntu 上使用 Samba 的 Git:“取消文件链接”
【发布时间】:2020-10-08 12:25:18
【问题描述】:

我的配置:

  • Gitlab 上的远程存储库。

  • Windows 10 机器 使用 git (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 机器上没有问题。

有什么想法吗?

【问题讨论】:

  • 我对我的帖子发表评论,希望它能为遇到同样问题的人服务。我用 Samba 和 Linux 重新安装了机器: - 使用 Ubuntu Server 20.0 -> 仍然有问题 - 使用 Ubuntu Desktop 20.0 -> 仍然有问题 - 使用 Centos 8 -> 已解决! :-D

标签: git ubuntu gitlab samba


【解决方案1】:

有点晚了,但我也遇到了这个问题,经过一些横向研究,我发现了这种奇怪行为的(至少一个)原因。

SMB 有一个缓存,其默认设置对于 GIT 来说过于激进,在结账或克隆期间需要创建大量连续文件。请看以下链接:

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-7/ff686200(v=ws.10)#details

虽然本文提到的是旧版本的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多