Tortoise SVN操作后文件丢失了IIS_IUSRS权限

时间:2012-01-19 21:31:38

标签: asp.net svn iis tortoisesvn file-permissions

我最近将我的开发机器从Windows XP切换到Windows 7,从那次切换开始,当我使用Tortoise SVN进行操作时,我遇到了文件权限问题。

实施例: 我在本地IIS上设置了两个ASP.NET网站。 BetaDevloBeta是我正在处理的分支机构的结账,Devlo是对主干的检查。
我在Beta网站上进行了一些更改并将其签入 然后我在merge网站上设置了Devlo重新整合卡车中的分支,但是当我测试它时出现了这个错误:

Parser Error   
Description: An error occurred during the parsing of a resource required to 
service this request. Please review the following specific parse error details 
and modify your source file appropriately.  

Parser Error Message: Access to the path 'C:\[...]' is denied.

经过调查,我发现Tortoise SVN merge修改的每个文件都失去了用户 IUSE 的文件权限(读取,读取和执行) IIS_IUSRS 即可。

我可以手动将它们放回去,但每次执行此类操作时都会发生这种情况。是否有办法通过SVN操作保持这些权限不变?


更新
在合并之前,文件是从父文件夹继承的权限(它应该这样做。)
Before Merge

合并后

After Merge

继承的原始文件(在beta文件夹中)是来自父文件夹的权限。 为什么TortoiseSVN(明确地?)阻止权限继承?

4 个答案:

答案 0 :(得分:12)

我遇到了同样的问题,并在这个SO答案的帮助下修复了它:https://stackoverflow.com/a/8993163/361831

答案提到更新的文件被复制到.svn / tmp目录,该目录位于工作副本的顶层(从tortoiseSVN 1.7开始)。这个顶级目录没有IIS权限,所以我猜他们在复制期间没有继承。所以我只是将IIS权限设置为该顶级目录并设置为继承,这解决了问题。

答案 1 :(得分:4)

当subversion更新文件时,它首先在.svn / tmp /中创建一个临时版本。然后它将文件移动到正确的位置。 (这是为了避免腐败)

在1.6中,它为每个目录单独执行此操作,但在1.7中,工作副本的顶级目录中只有.svn。

如果以某种方式限制此.svn目录的文件系统权限,则可能会在文件移动到位时复制限制。 (Subversion不会在Windows上更改权限本身)

解答:找到该项目的.svn目录,并使用项目所需的权限修复权限。

答案 2 :(得分:-1)

您应该能够在包含文件的文件夹上设置这些权限,然后让文件继承这些权限,而不是显式设置文件本身的权限。

TortoiseSVN可能会删除和创建文件而不是重命名。以这种方式创建新文件时,它将不具有原始权限,但它将从其容器继承权限。

另请参阅:Explicit vs. Inherited Permissions

  

可以使用以下两种方式之一分配存在的每个权限:   明确地或通过继承。出于这个原因,权限是   称为显式权限和继承权限。

     
      
  • 显式权限是在创建对象时或用户操作时默认设置的权限。
  •   
  • 继承权限是赋予对象的权限,因为它是父对象的子级。
  •   
     

类似于为用户组管理权限的方式,权限   最好管理对象的容器。内部的物体   容器继承该容器中的所有访问权限。

另请参阅:TortoiseSVN - Deleting, Moving and Renaming

  

由于重命名和移动是以删除后跟添加...

完成的

答案 3 :(得分:-1)

我在Win7 64bit机器上遇到了同样的问题。我会检查一个代码,转到另一个,执行Tortoise SVN更新,并且必须重置文件夹的权限,让父文件夹的权限向下传播。

我终于找到了这篇文章,试了一下,两周后它似乎还在坚持下去。

  • 打开注册表编辑器(单击开始>运行,键入regedit,然后按ENTER键。)

  • 找到以下注册表项:

  • HKEY_CURRENT_USER \ SOFTWARE \微软\的Windows \ CurrentVersion \政策\ Explorer中

  • 选择密钥后,在“编辑”菜单上,单击“添加值”,然后添加以下注册表值:

  • 值名称:ForceCopyAclwithFile

  • 数据类型:DWORD

  • 价值数据:1

  • 退出注册表编辑器。

http://kb.globalscape.com/KnowledgebaseArticle10473.aspx