2012-01-23 50 views
5

背景(如果你想的问题跳到底部)AnkhSVN的打破了SVN 1.7

最近我升级的SVN仓库(托管在assembla)到SVN 1.7 ASP.NET共享权限。这样做后,我们开始间歇性地在存储库本地工作副本中的ASP.NET网站页面上遇到大量File Access Denied错误。

某些文件夹也开始出现奇怪的文件权限(它们被标记为只读),并且用户共享从它们中删除。这些问题只会在更新/提交循环之后通过AnkhSVN的Visual Studio插件才会开始发生,但不是所有的时间;它似乎非常气质。

我们迄今为止发现的唯一临时修复是提交任何未完成的更改,删除本地副本并重新签出完整的工作副本(使用TortoiseSVN)。但是,这不是一个可行的解决方案,并且严重影响生产力。

此网站是基于Azure的ASP.NET WebWorkerRole。在升级到SVN 1.7之前,它从未给出任何问题。我尝试摆弄内部IIS权限来解决问题,但是,没有骰子。

我的环境

  • 的Visual Studio 2010旗舰版SP1 10.0.40219.1
  • AnkhSVN的2.3.10509(最新版本,支持SVN 1.7.1)
  • TortoiseSVN的1.7.1,建设22161 - 64位
  • 经由天青模拟器环境运行在调试模式下

问题

SVN 1.7或我的环境中的任何工具是否有可能中断文件权限,以便文件在ASP.NET网站中无法使用?更重要的是,我该如何解决这个问题?


确切的文件权限错误倾倒出来是这样的:

访问路径 '// //文件' 被拒绝。

描述:在执行 当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关该错误的更多信息以及源代码的位置。

异常详细信息:System.UnauthorizedAccessException:访问 路径'// file //'被拒绝。

ASP.NET未被授权访问请求的资源。考虑 将对资源的访问权限授予ASP.NET请求 标识。 ASP.NET具有基本的进程标识(通常在IIS 5上为IIS35或IIS5上的 {MACHINE} \ ASPNET或IIS 7上的网络服务,以及在IIS 7.5上配置的应用程序池标识, ) 。如果应用程序是 模拟通过,身份将是 匿名用户(通常IUSR_MACHINENAME)或验证 请求用户。

要授予对文件的ASP.NET访问权限,请右键单击资源管理器中的文件, 选择“属性”并选择安全选项卡。点击“添加”添加 适当的用户或组。突出显示ASP.NET帐户,并 选中所需访问的复选框。

但干净的工作副本不会产生此错误。比较两者的权限,似乎没有窃听的工作拷贝与IUSR和本地帐户共享,而破坏的工作拷贝没有共享,但共享永远不会被用户改变。

+0

你能指出文件权限被破坏的方式吗?他们设定了什么,缺少什么等等?你能指出工作拷贝根目录(包含.svn文件夹的文件夹)吗?另外我认为你需要编辑你的问题来定义仓库和工作副本之间的区别。您不需要在Subversion中克隆“客户端存储库”。 –

+0

@SanderRijken:好的,我会更新它。在克隆思维方面,是GIT的... – Necrolis

回答

3

我通过访问网站文件夹的安全设置并单击“高级”,然后单击“更改IIS_IUSRS用户的权限”来解决此问题。我检查了“用来自此对象的可继承权限替换所有子对象权限”,然后单击“应用”。

在此之前,我已经让IIS用户对结帐根目录中隐藏的tmp文件夹拥有完全权限,但我不知道这是否对任何事情有帮助。

我不确定这是否是永久性修复,但如果不是,您至少可以使用它在单个操作中重新应用所有文件的权限。

+0

终于让它再次突破,重新应用安全权限修复它,同时我们设法发现如果某个用户提交,我们得到这个问题,我有一种感觉,他的IIS设置不正确 – Necrolis

+0

应用上述修复程序并使用了8天后,我没有再次遇到问题。 –

+0

我想我有与MVC3相同的问题,但它有点不同。我已经按照你的建议添加了权限。同样对于NETWORK SERVICE标识(这是appPool的标识),但对javascript或css文件的每个请求都会返回一个HTTP 302 FOUND代码。之后,每个请求都会被重定向到具有无意义参数的登录页面。有没有人有任何其他想法如何解决它? – jkokorian

16

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

在1.6中它为每个目录本身做了这个,但是在1.7中,工作副本顶层目录中只有一个.svn。

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

1

许多信息位于签出项目的目录内的.svn文件夹中。所以在我看来,更好地将SVN与高级集成工具分开使用。还有this涉及解决这样的问题。

1

我发现,当我做了一个 '恢复' 使用此相同的问题发生了:

  • 乌龟SVN 1.6.16
  • AnkhSVN的2.3.11269.1348。
  • Visual Studio 2010 Professional
  • Windows 7 - 64位。

我第一次遇到权限错误,并开始时认为它是我的代码,我完全迷惑不解。经过一段时间的摆弄之后,我终于删除了整个项目,并从Subversion重新下载修复了这个问题。

当这个问题再次发生时,我更仔细地查看了恢复的文件,并且我发现恢复的文件的权限与其他文件的权限不匹配。特别是对于运行Visual Studio的机器,“用户”权限完全缺失。

所以我就加入它通过:关于这个问题的文件

  • 点击鼠标右键。这导致文件属性窗口出现。
  • 然后点击'编辑...'。出现许可窗口。
  • 然后点击添加,出现“选择用户,计算机,服务帐户或组”窗口。
  • 单击对象类型按钮并检查所有框。
  • 单击位置按钮并确保您的机器名称被选中。
  • 输入'users',然后点击'check names'按钮。
  • 点击确定在所有窗口关闭它们。

您的网站现在应该运行时没有权限错误。