TortoiseSvn和Windows Server 2008用户账户控制

29

这是问题:
在不关闭用户账户控制的情况下,TortoiseSvn能在Windows 2008上工作吗?

这是故事: 我刚把我的测试服务器移到了Windows 2008上,我在使用TortoiseSvn时遇到了问题。虽然我以管理员身份登录,但当我尝试从Subversion仓库更新一些代码时,我得到了一个消息: 错误:无法将文件“C:\dev\trunk.svn\entries”设置为读写状态:拒绝访问 看到这样的消息,我知道要运行cleanup。但是当我运行cleanup时,我得到了以下消息: 清理无法处理以下路径:C:\dev\trunk

因此,进一步调查使我相信我有一个权限问题。从命令提示符中运行svn status会显示目录已锁定,并且运行svn cleanup也会像tortoise cleanup一样失败。但是,当我以管理员身份启动命令提示符时,我可以无问题地运行svn cleanup,并且可以运行svn up以获取我的文件更新。

更新: 这是Windows UAC权限问题。关闭UAC可以解决该问题。但我想找到一种不需要关闭UAC的解决方案。由于Tortoise是Windows shell扩展,我不知道如何将其作为管理员运行。

有什么建议吗?


将其以管理员身份运行只会导致“请求的操作需要提升”窗口消息,并且界面根本不会运行。请参阅https://dev59.com/ZFPTa4cB1Zd3GeqPlrbE#4806112。 - user692942
5个回答

38

右键单击您的工作副本 c:\dev 文件夹,从上下文菜单中选择"属性"。

在属性对话框中,转到安全选项卡。您会注意到管理员用户没有完全访问权限(该用户未列在其中)。 添加管理员用户并授予其完全访问权限。

是的,管理员用户通常具有所有文件夹的完全访问权限,但前提是经过UAC提示。应用程序通常不提供UAC提示,而是出现访问被拒绝的错误。为了使管理员用户在没有UAC提示的情况下拥有该文件夹的完全访问权限,您必须手动添加该用户。


1
这是Windows 2008的问题,而不是TortoiseSVN特有的问题。当我检出文件时,我使用的是管理员账户。Windows让本地管理员组成为文件和文件夹的所有者。但Windows应该让我的用户账户成为所有者。所以现在,即使我创建了文件夹,直到我给我的账户对文件夹授权,我才有权编辑文件夹内容。我也可以作为管理员访问文件夹,但我没有使用“管理员”进行检出操作。这个行为就是没有意义的。 - Mark Arnott
1
我有同样的问题。但是,我有一个用户(在管理员组中),用于登录并在资源管理器中使用TortoiseSVN。在同一帐户上,我以提升的权限(作为管理员)运行VS2008,并使用AnkhSVN。每当我使用VS提交某些内容时,Tortoise就会开始抱怨“访问被拒绝”。文件夹的安全设置将完全控制权赋予管理员组。我该怎么办? - Robert Koritnik
3
通过为特定用户添加权限来解决相同的问题,即使该权限已经明确授予管理员组。 - eglasius
1
Stefan,你是第一个透露如何消除这种麻烦的人。每个人都告诉你关闭UCA或其他东西,这个答案是“正确”的答案。如果可以给你两个加号。 - Shrage Smilowitz
2
@Shrage Shmilovitz - “每个人都告诉你关闭UCA或其他东西” - 这个评论是不正确的。我在两个月前给出了与Stefan完全相同的答案 - 让用户完全控制该文件夹。 - Franci Penov
显示剩余3条评论

9

拥有并对C:\Dev\Trunk.svn及其子项给予完全控制权,这样应该可以解决你的问题。

我建议不要关闭UAC。但如果您确实需要关闭它,可以通过控制面板\用户帐户\打开或关闭用户帐户控制来实现。


我创建了这些文件夹,所以我已经拥有它们。关闭用户账户控制确实解决了问题,但这不是我要寻找的解决方法。 - Mark Arnott
实际上,默认权限比那还要棘手一些。另一个账户可以在你拥有但你无法访问的文件夹子目录中创建文件。 - Franci Penov
很奇怪,我本地的管理员组拥有完全控制权限,但在尝试更新或切换数据库时仍然出现了只读数据库的错误。将我的用户显式添加到“安全”选项卡中解决了这个问题,即使我是本地管理员也是如此。感谢您的帮助。更重要的是,我不必牺牲UAC保护来完成它。 - user692942

0

我们刚刚升级到了 SVN 1.9.3,但是我们在开发服务器上使用 SVN 直接从仓库中检出网站文件来更新我们的测试站点。我们发现没有执行原始检出的用户没有权限运行 SVN 更新。现在,所有这些用户都是管理员组的一部分,但它仍然没有关系,但我们发现非常奇怪的是,您可以将 Everyone 组添加到已检出的文件夹中,然后任何人都能执行 SVN 更新。

我不明白为什么添加了 Everyone 组就能执行此操作,而不是管理员组中的任何人。

我确保管理员组具有完全控制权,并且已传播到所有子目录和文件。但这并没有关系。

如果有人对此有解释,那将非常有帮助。


0

我在Windows Vista SP1上使用TortoiseSVN,并开启了UAC,没有遇到任何问题。由于Vista SP1和Windows 2008本质上是相同的操作系统,我认为您可能遇到了其他问题。

SVN会重命名许多临时文件,如果存在共享冲突,它就不太稳定。我发现一些杀毒软件会发现SVN刚刚关闭了一个(临时)文件。他们会扫描它,而在他们扫描它的同时,SVN试图将其重命名 - 共享冲突:崩溃。搜索索引器有时会导致相同的问题。

请尝试停止对源目录进行索引或防止您的杀毒软件对其进行实时扫描。您可以排除这些目录,也可以排除TortoiseProc.exe进程。


我可以看出 AV 和索引可能会有问题,但是我在这台服务器上没有安装 AV,并且每次尝试使用 tortoise 更新时文件夹都被锁定。与索引服务共享的问题将是间歇性的。 - Mark Arnott
好的。我的意思是TortoiseSVN在那个操作系统上确实可以工作。您尝试使用SysInternals的Process Monitor查看哪个其他进程打开了这些文件吗? - Roger Lipscombe

-1
你是否尝试在Windows资源管理器中导航到Program Files\TortoiseSVN\bin,并在TortoiseProc.exe > 属性 > 兼容性中设置“以管理员身份运行”?

如果您这样做,并且UAC是显式的,您将收到一个“所请求的操作需要提升”Windows消息,并且TortoiseProc.exe永远不会运行。 - user692942

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接