我花了一整天的时间来解决这个问题,现在真的很绝望。
Windows 10 是我的主机,在其中,我运行 Debian VM,将其用作完整的 Linux Web 堆栈。Linux VM 运行 SVN 服务器,它本身运行良好。在我的 Windows 10 机器(本地驱动器)上,我可以签出并提交。我使用我在 SVN 中配置的唯一用户执行此操作。
但这不是我的用例。我想要的是使用我的 Windows IDE 直接操作 Linux 服务器上的文件。我通过网络映射访问所述文件。
为了实现这一点,我在 Linux VM 上安装了 SAMBA。这本身也有效。我可以访问网络映射并完全控制其上的所有文件。授权设置很简单:我有一个组 @fileadmins,我向其中添加了我的个人用户、root 和 www-data(用于 Apache)。但是,为了使这种情况简单化,目前我使用 root 帐户执行所有操作。
现在进入最后一部分:我喜欢将工作副本放在该网络驱动器上。这样,我就可以使用 TortoiseSVN 从 Windows 无缝地直接操作文件以及提交。我知道不建议使用这种情况,但请注意,我是唯一的用户,这是一种非常高效的设置。多年来,我一直在以前的服务器上为个人项目这样做。
由于某种原因,这次我无法让它工作。这是我遇到的错误,例如在第一次签出存储库时:
无法将“W:\jd5.svn\tmp\svn-5FDD2730”移动到“W:\jd5.svn\pristine\18\185e98e0088e20d84a5dfaaee60a22f73658439a.svn-base”:访问被拒绝。
从遇到类似问题的人那里,我了解到 TortoiseSVN 正在动态创建这些 SVN 特定的文件,这些文件具有一组特定的非常有限的权限(即只读),并且具有有限的 Linux 文件权限。
因此,几乎所有答案都集中在配置 Samba 以强制对新创建的文件(例如 TortoiseSVN 创建的文件)设置更高的权限。这是我当前的 Samba 配置文件:
[projects]
comment = web apps for users in group *fileadmins*
path = /var/www/apps
valid users = @fileadmins
create mask = 0777
directory mask = 0777
writable = yes
force create mode = 0777
force directory mode = 0777
write list = +@fileadmins
delete readonly = yes
read only = No
如您所见,我故意将权限留空,只是为了让某些功能正常工作。如果我现在从 Windows 在网络驱动器上手动创建一个新的文本文档,它将应用上述权限,这样就可以正常工作了。
TortoiseSVN 客户端创建的文件(特别是它抱怨的文件)如下:
- .svn/tmp(组:fileadmins,所有者:root,权限:0777)
- .svn/tmp/svn-5FDD2730(组:root,所有者:root,权限:0777)
- .svn/pristine(组:fileadmins,所有者:root,权限:0777)
- .svn/pristine(组:fileadmins,所有者:root,权限:0777)
- .svn\pristine\18(组:root,所有者:root,权限:0777)
从表面上看,root 对所有文件具有完全访问权限,并且我以 root 用户身份使用网络驱动器。我假设 TortoiseSVN 在同一帐户下运行。
上述情况唯一奇怪的是,有些文件将 root 作为其所属组。我尝试通过 Samba 设置强制指定一个组,但这导致整个驱动器不可用。无论如何,由于 root 是所有者(作为用户),我认为这并不重要。
从我的角度来看,我已经将权限扩展到最大可能,但仍然会出现权限错误。我很想知道我忽略了什么。十多年来,我在多台机器上使用过这样的设置,但在这一台机器上却完全卡住了。
答案1
我也遇到了这个问题,但我发现如果我重复更新过程几次,最终所有文件都会更新。我偶尔也需要清理一下。
当我将 Tortoise 从 1.7.11.xx 升级到 1.9.0.xx 时,出现了这个问题