问题描述:

I recently switched my development machine from Windows XP to Windows 7 and since that switch, I have a problem with files permissions when I do operations with Tortoise SVN.

Example:

I Have two ASP.NET website set on my local IIS. Beta and Devlo. Beta is a check out of the branch I'm working on and Devlo is a check out of the Trunk.

I made some change on the Beta website and Check it in.

Then I made a merge to reintegrate the branch in the truck on the Devlo website, but I got this error when I test it :

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.

After investigation, I discovered that every file that was modified by the Tortoise SVN merge lost theirs file permission (Read, Read & Execute) for the users IUSE and IIS_IUSRS.

I could manually put them back, but this happen every time I perform an operation of this kind. Is there a way to keep those permissions unchanged by the SVN operation?


Update

Before the Merge, the file was inheriting is permission from the parent folder (has it's supposed to do.)

But not after the merge :

The original file (in the beta folder) was inheriting is permission from the parent folder.

Why the TortoiseSVN (explicitly?) block permission inheritance?

网友答案:

I had the same issue and fixed it with the help of this SO answer: http://stackoverflow.com/a/8993163/361831

The answer mentions that updated files are copied to a .svn/tmp directory which is located in the top level of your working copy (as of tortoiseSVN 1.7). This top level dir didn't have the IIS permissions so I guess they weren't inheriting during the copy. So I just set the IIS permissions to that top level dir and set to inherit, and that fixed the issue.

网友答案:

When subversion updates a file it first creates a temporary version in .svn/tmp/. It then moves the file into the right location. (This to avoid corruptions)

In 1.6 it did this for every directory by itself, but in 1.7 there is just a .svn in the top level directory of your working copy.

If somehow the filesystem permissions of this .svn directory are restricted, it is possible that the restrictions are copied with the file when it is moved in place. (Subversion doesn't change the permissions itself on Windows)

ANSWER: Locate your .svn directory for that project and fix the permissions with permissions needed by your project.

网友答案:

You should be able to set these permissions on the folder that contains the files and then let the files inherit these permissions, instead of explicitly setting the permissions on the files themselves.

TortoiseSVN may delete and create files instead of renaming. When a new file is created this way it will not have the original permissions, but it will inherit permissions from its container.

See also: Explicit vs. Inherited Permissions

Each permission that exists can be assigned one of two ways: explicitly or by inheritance. For this reason, permissions are referred to as explicit permissions and inherited permissions.

  • Explicit permissions are permissions that are set by default when the object is created, or by user action.
  • Inherited permissions are permissions that are given to an object because it is a child of a parent object.

Similar to the way rights are managed for groups of users, permissions are best managed for containers of objects. Objects within the container inherit all the access permissions in that container.

See also: TortoiseSVN - Deleting, Moving and Renaming

Since renames and moves are done as a delete followed by an add...

网友答案:

I had the same problem on both my Win7 64bit machines. I would check in code on one, go to the other, do a Tortoise SVN Update, and have to reset the permissions on the folder to let the parent folder's permissions propagate downwards.

I finally found this article, tried it, and two weeks later it seems to be holding up.

  • Open the Registry Editor (click Start > Run, type regedit, then press ENTER).

  • Locate the following registry key:

  • HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer

  • With the key selected, on the Edit menu, click Add Value, and then add the following registry value:

  • Value name: ForceCopyAclwithFile

  • Data type: DWORD

  • Value data: 1

  • Exit the Registry Editor.

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

相关阅读:
Top