Потеря файла IIS_IUSRS после операции Tortoise SVN

Недавно я переключил свою машину разработки с Windows XP на Windows 7 и с этого коммутатора у меня возникла проблема с разрешениями файлов при работе с Tortoise SVN.

Пример: У меня есть два веб-сайта ASP.NET, установленных в моем локальном IIS. Beta и Devlo. Beta - это проверка ветки, над которой я работаю, и 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

Исходным файлом (в бета-папке) было наследование - это разрешение из родительской папки. Почему наследование разрешений на блокирование TortoiseSVN (явно?)?

Ответы

Ответ 1

У меня была такая же проблема и исправлено с помощью этого SO-ответа: fooobar.com/questions/345973/...

В ответе упоминается, что обновленные файлы копируются в каталог .svn/tmp, который находится на верхнем уровне вашей рабочей копии (с черепахиSVN 1.7). У этого верхнего уровня не было разрешений IIS, поэтому я предполагаю, что они не наследовались во время копирования. Поэтому я просто установил разрешения IIS для этого верхнего уровня и установил наследование, и это устранило проблему.

Ответ 2

Когда subversion обновляет файл, он сначала создает временную версию в .svn/tmp/. Затем он перемещает файл в нужное место. (Чтобы избежать коррупции)

В 1.6 он сделал это для каждого каталога сам по себе, но в 1.7 есть только .svn в каталоге верхнего уровня вашей рабочей копии.

Если каким-то образом права на файловые системы этого каталога .svn ограничены, возможно, что ограничения копируются с файлом, когда он перемещается на место. (Subversion не изменяет сами разрешения для Windows)

ANSWER: найдите свой .svn-каталог для этого проекта и исправьте разрешения с разрешениями, необходимыми вашему проекту.

Ответ 3

Вы должны установить эти разрешения в папке, содержащей файлы, а затем позволить файлам наследовать эти разрешения, а не явно устанавливать разрешения на сами файлы.

TortoiseSVN может удалять и создавать файлы вместо переименования. Когда новый файл создается таким образом, он не будет иметь исходные разрешения, но он наследует разрешения из своего контейнера.

Смотрите также: Явное и унаследованное разрешения

Каждому разрешенному разрешению может быть присвоен один из двух способов: явно или по наследству. По этой причине разрешения называемые явными разрешениями и унаследованными разрешениями.

  • Явные разрешения - это разрешения, которые устанавливаются по умолчанию при создании объекта или действии пользователя.
  • Унаследованные разрешения - это разрешения, предоставляемые объекту, потому что это дочерний элемент родительского объекта.

Аналогично тому, как управляются права для групп пользователей, разрешения лучше всего управлять контейнерами объектов. Объекты внутри контейнер наследует все разрешения доступа в этом контейнере.

Смотрите также: TortoiseSVN - Удаление, перемещение и переименование

Поскольку переименования и перемещения выполняются как удаление, за которым следует добавление...

Ответ 4

У меня была такая же проблема на обеих моих 64-битных машинах Win7. Я бы проверил код на одном, перейдите к другому, сделайте обновление SVN Tortoise и должен reset разрешить эту папку, чтобы разрешения родительской папки распространялись вниз.

Наконец-то я нашел эту статью, попробовал, и через две недели она, кажется, держится.

  • Откройте редактор реестра (нажмите "Пуск" > "Выполнить", введите "regedit", затем нажмите "ENTER" ).

  • Найдите следующий раздел реестра:

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

  • С выбранным ключом в меню "Правка" нажмите "Добавить значение", а затем добавьте следующее значение реестра:

  • Имя значения: ForceCopyAclwithFile

  • Тип данных: DWORD

  • Данные значения: 1

  • Выход из редактора реестра.

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