2012-01-19 43 views
15

我最近將我的開發機器從Windows XP切換到Windows 7,並且自該交換機以來,我在使用Tortoise SVN進行操作時遇到了文件權限問題。在Tortoise SVN操作後文件丟失了IIS_IUSRS權限

例如: 我有兩個ASP.NET網站設置在我的本地IIS上。 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. 

調查後,我發現每一個由烏龜SVN merge修改後的文件丟失了他們的文件權限(讀取,讀取&執行)爲用戶IUSEIIS_IUSRS

我可以手動將它們放回去,但每次執行此類操作時都會發生這種情況。有沒有辦法通過SVN操作保持這些權限不變?


更新
在合併之前,該文件是繼承的是合併後從父文件夾的權限(有它應該做的。)
Before Merge

After Merge

繼承的原始文件(在beta文件夾中)是來自父文件夾的權限。 爲什麼TortoiseSVN(顯式地?)阻止權限繼承?

+0

你可以使用命令行svn.exe進行合併,看它是否真的是TortoiseSVN而不是svn.exe? –

+0

svn.exe?我沒有安裝SVN的命令行版本。 (我做了一個文件搜索SVN.EXE)。真的有關係嗎? – DavRob60

+0

這將有助於明確定義問題。 TortoiseSVN包括它,但也許它嵌入在二進制文件中,這可能解釋了爲什麼你找不到它。您可以在此處下載獨立客戶端:http://subversion.apache.org/packages.html#windows –

回答

12

我有同樣的問題,並與這幫助固定這麼回答:https://stackoverflow.com/a/8993163/361831

答案提到,更新的文件複製到這是一個.svn/tmp目錄位於工作副本的頂層(如tortoiseSVN 1.7)。這個頂級目錄沒有IIS權限,所以我猜他們在複製過程中沒有繼承。因此,我只是將IIS權限設置爲該頂級目錄並設置爲繼承,並解決了問題。

+1

已測試並正在運行,但當您的目錄結構*需要*將不同的權限應用於某些特定的子文件夾時,仍存在問題。就像上傳子目錄的寫權限一樣。但至少,問題的根源是確定的。謝謝! – DavRob60

+0

當您無法更改.svn文件夾的權限時,因爲某些文件夾具有不同的權限。你可以[使用腳本/ icacls重置權限](http://serverfault.com/questions/475612/replace-permission-entries-on-all-child-objects-using-icacls/601853#601853)也可以: 'cd D:\網站\您的網站','svn更新','icacls「D:\網站\您的網站\ httpdocs \ *」/ q/c/t /重置「 –

-1

您應該可以在包含這些文件的文件夾上設置這些權限,然後讓這些文件繼承這些權限,而不是明確設置文件本身的權限。

TortoiseSVN可能會刪除並創建文件而不是重命名。當以這種方式創建新文件時,它將不具有原始權限,但會從其容器繼承權限。

參見:Explicit vs. Inherited Permissions

存在可分配兩種方式之一每個權限: 明確或通過繼承。出於這個原因,權限是 稱爲顯式權限和繼承權限。

  • 顯式權限是在創建對象或用戶操作時默認設置的權限。
  • 繼承權限是授予對象的權限,因爲它是父對象的子對象。

與用戶組管理權限的方式類似,權限 最適合對象的容器管理。 容器中的對象繼承該容器中的所有訪問權限。

參見:TortoiseSVN - Deleting, Moving and Renaming

由於重命名和移動作爲一個刪除後加做...

+0

查看我的更新,設置爲從其容器繼承的權限。 – DavRob60

+0

「以這種方式創建新文件時,它將不具有原始權限,但會從其容器繼承權限」 - 問題中提到的問題正是這種情況不會發生。 – bzlm

-1

我有我的兩個64位的Win7機同樣的問題。我會檢查一個代碼,然後轉到另一個,執行Tortoise SVN Update,並且必須重置該文件夾上的權限,以便讓父文件夾的權限向下傳播。

我終於找到了這篇文章,試了一下,兩週後它似乎在等待。

  • 打開註冊表編輯器(單擊開始>運行,鍵入regedit,然後按ENTER鍵)。

  • 找到以下注冊表項:

  • HKEY_CURRENT_USER \ SOFTWARE \微軟\的Windows \ CurrentVersion \政策\探險

  • 與鍵選定,在編輯菜單上,單擊添加值,然後添加以下注冊表值:

  • 值名稱:ForceCopyAclwithFile

  • 數據類型:DWORD

  • 值數據:1

  • 退出註冊表編輯器。

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

+0

沒有爲我工作。閱讀完文章後,我不明白它有什麼用處。 – DavRob60

4

當顛覆更新文件時,它首先在.svn/tmp /中創建一個臨時版本。然後它將文件移動到正確的位置。 (這是爲了避免損壞)

在1.6中它爲每個目錄本身做了這個,但是在1.7中,工作副本頂層目錄中只有一個.svn。

如果以某種方式限制了此.svn目錄的文件系統權限,則有可能在文件移動到位時將限制與文件一起復制。(Subversion不會在Windows上更改權限本身)

回答:找到該項目的.svn目錄,並使用項目所需的權限修復權限。