2012-01-19 23 views
15

Recentemente ho cambiato la mia macchina di sviluppo da Windows XP a Windows 7 e da quel passaggio ho un problema con i permessi dei file quando eseguo operazioni con Tortoise SVN.Il file ha perso l'autorizzazione IIS_IUSRS dopo un'operazione SVN Tortoise

Esempio: I Ho due sito Web ASP.NET impostato sul mio IIS locale. Beta e Devlo. Beta è un check out del ramo su cui sto lavorando e Devlo è un check out del trunk.
Ho fatto qualche cambiamento sul sito Beta e controllarla in
Poi ho fatto un merge di reintegrare il ramo nel camion sul sito Devlo, ma ho ottenuto questo errore quando prova che:.

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. 

Dopo indagini, ho scoperto che ogni file che è stato modificato dal tortoisesvn merge perso il loro file di autorizzazione (Leggi, & Read Execute) per gli utenti IUSE e IIS_IUSRS.

Posso reinserirli manualmente, ma ciò accade ogni volta che eseguo un'operazione di questo tipo. C'è un modo per mantenere queste autorizzazioni invariate dall'operazione SVN?


Aggiornamento
prima della fusione, il file è stato di assoggettamento è l'autorizzazione dalla cartella principale (ha ha supposto per fare.)
Before Merge

Ma non dopo l'unione:

After Merge

Il file originale (nella cartella beta) ereditava l'autorizzazione dalla cartella principale. Perché il TortoiseSVN (esplicitamente?) Blocca l'ereditarietà dei permessi?

+0

Si può fare un'unione con la riga di comando svn.exe per vedere se è veramente TortoiseSVN e non svn.exe? –

+0

svn.exe? Non ho la versione da riga di comando di SVN installata. (E ho fatto una ricerca di file per SVN.EXE). Importa davvero? – DavRob60

+0

Sarebbe utile definire chiaramente il problema. TortoiseSVN lo include, ma forse è incorporato nei loro binari, il che potrebbe spiegare perché non riesci a trovarlo. Puoi scaricare il client stand-alone qui: http://subversion.apache.org/packages.html#windows –

risposta

12

Ho avuto lo stesso problema e ha risolto il tutto con l'aiuto di questo SO rispondere: https://stackoverflow.com/a/8993163/361831

La risposta afferma che i file aggiornati vengono copiati in una directory .svn/tmp che è si trova nel livello più alto della tua copia di lavoro (a partire da tortoiseSVN 1.7). Questa directory di livello superiore non disponeva delle autorizzazioni IIS, quindi suppongo che non abbiano ereditato durante la copia. Quindi ho appena impostato le autorizzazioni IIS per quella directory di primo livello e impostato per ereditare e questo ha risolto il problema.

+1

Testato e funzionante, ma c'è ancora un problema quando la struttura della directory * ha bisogno * di applicare diritti diversi ad alcune sottocartelle specifiche. Come il permesso di scrittura su una sottodirectory di upload o qualsiasi altra cosa. Ma, almeno, viene identificata la radice del problema. Grazie! – DavRob60

+0

Quando non è possibile modificare le autorizzazioni della cartella .svn, poiché alcune cartelle hanno autorizzazioni diverse. Puoi [resettare i permessi usando script/icacls] (http://serverfault.com/questions/475612/replace-permission-entries-on-all-child-objects-using-icacls/601853#601853) anche: 'cd D: \ siti Web \ tuo-sito', 'svn update',' icacls "D: \ siti Web \ tuo-sito \ httpdocs \ *"/q/c/t/reset' –

-1

Dovresti essere in grado di impostare queste autorizzazioni sulla cartella che contiene i file e quindi lasciare che i file ereditino queste autorizzazioni, invece di impostare esplicitamente le autorizzazioni sui file stessi.

TortoiseSVN può eliminare e creare file invece di rinominare. Quando un nuovo file viene creato in questo modo non avrà le autorizzazioni originali, ma erediterà le autorizzazioni dal suo contenitore.

Consulta anche: Explicit vs. Inherited Permissions

ogni autorizzazione che esiste può essere assegnato uno dei due modi: esplicitamente o per eredità. Per questo motivo, le autorizzazioni sono denominate autorizzazioni esplicite e autorizzazioni ereditate.

  • Le autorizzazioni esplicite sono autorizzazioni che vengono impostate per impostazione predefinita quando viene creato l'oggetto o per azione dell'utente.
  • Le autorizzazioni ereditate sono autorizzazioni concesse a un oggetto perché è figlio di un oggetto padre.

Analogamente al modo in cui i diritti vengono gestiti per gruppi di utenti, le autorizzazioni vengono gestite meglio per contenitori di oggetti. Gli oggetti nel contenitore ereditano tutte le autorizzazioni di accesso in quel contenitore.

Vedi anche: TortoiseSVN - Deleting, Moving and Renaming

Dal rinomina e si muove sono fatto come un'operazione di eliminazione seguita da un add ...

+0

Vedere il mio aggiornamento, le autorizzazioni dove impostato per essere ereditato dal suo contenitore. – DavRob60

+0

"Quando un nuovo file viene creato in questo modo non avrà le autorizzazioni originali, ma erediterà le autorizzazioni dal suo contenitore" - il problema indicato nella domanda è precisamente che ciò non accade. – bzlm

-1

Ho avuto lo stesso problema su entrambe le mie macchine a 64 bit Win7. Vorrei controllare il codice su uno, andare all'altro, fare un aggiornamento SVN Tortoise, e devo reimpostare le autorizzazioni sulla cartella per lasciare che le autorizzazioni della cartella genitrice si propagano verso il basso.

Alla fine ho trovato questo articolo, l'ho provato, e due settimane dopo sembra che regge.

  • Aprire il Registry Editor (fare clic su Start> Esegui, digitare regedit, quindi premere INVIO).

  • Individuare la seguente chiave di registro:

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

  • Con la chiave selezionata dal menu Modifica, scegliere Aggiungi valore e quindi aggiungere il seguente valore di registro:

  • nome valore: ForceCopyAclwithFile tipo

  • dati: DWORD

  • Dati valore: 1

  • Uscire l'Editor del Registro di sistema.

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

+0

Non ha funzionato per me. E dopo aver letto l'articolo, non vedo come potrebbe aiutare. – DavRob60

4

Quando subversion aggiorna un file, crea prima una versione temporanea in .svn/tmp /. Quindi sposta il file nella posizione corretta. (Questo per evitare corruzioni)

In 1.6 lo ha fatto per ogni directory da solo, ma in 1.7 c'è solo un .svn nella directory di livello superiore della tua copia di lavoro.

Se in qualche modo le autorizzazioni del file system di questa directory .svn sono limitate, è possibile che le restrizioni vengano copiate con il file quando viene spostato sul posto.(Subversion non modifica le autorizzazioni in sé su Windows)

ANSWER: Individua la directory .svn per quel progetto e correggi le autorizzazioni con le autorizzazioni necessarie per il tuo progetto.

Problemi correlati