2009-07-30 9 views
8

Spesso quando faccio un checkout di un ramo diverso, o un reset, mi metterò 'permesso negato' errori da Windows per uno a una decina di file - ma la particolare i file variano da corsa a corsa. Ecco l'output di un test che ho appena fatto, con GIT_TRACE = 1. La traccia aggiunto solo l'una linea prima che il messaggio di errore:git checkout e reimpostare su Windows mostra di tanto in tanto file casuali sono cambiati

 
$ git checkout master 
trace: built-in: git 'checkout' 'master' 
error: git checkout-index: unable to create file dotnet/src/myfile.cs (Permission denied) 
D  dotnet/src/myfile.cs 
Switched to branch "master" 

Sono abbastanza sicuro che questo è un po 'di corsa con un programma antivirus o un altro servizio di indicizzazione sulla mia macchina. Se la gara persistesse, potrei usare sysinternals per vedere quale processo ha il gestore di file aperto. Tuttavia, accade molto rapidamente e non sono a conoscenza di uno strumento che mi mostrerà questo conflitto. Sorprendentemente, non ho trovato nessuno che descrivesse un comportamento simile. Come posso interrompere questi errori o diagnosticare ulteriormente il problema?

che sto in particolare alla ricerca di porre fine alla corsa di accesso ai file, identificando qualsiasi processo sta facendo l'accesso simultaneo. Quindi suggerimenti per uno strumento che mostra quale processo ha un file bloccato quando una modifica è negata sarebbe molto utile. Sono a conoscenza di "unlocker" e strumenti simili che mi mostreranno quale processo trattiene un file bloccato per un periodo di tempo. Questo non funziona per questo problema, perché il processo mantiene il file bloccato per un periodo molto breve. Quindi lo strumento deve raccogliere i dati appropriati senza il mio intervento, perché sono troppo lento.

risposta

3

Disabilitare UAC virtualizzazione sembra aver risolto il problema.

Vedi http://code.google.com/p/msysgit/issues/detail?id=320

+1

Nota anche il commento # 16 lì. Mettere il repository su una partizione non di sistema risolve anche il problema. http://code.google.com/p/msysgit/issues/detail?id=320#c16 –

1

Si può iniziare con un:

GIT_TRACE=1 

Ma non può visualizzare molto di più di quanto il tuo messaggio originale per quanto riguarda questo file.

la causa usuale è qualche redattore aperto che vuole ricaricare i file quando cambiato, e che può entrare in conflitto con le manipolazioni di file di Git.
Ciò significa: la solita strategia consiste nel ripetere il comando git dopo dopo aver chiuso come molte altre applicazioni che è possibile.

non ho trovato nessuno che descrive un comportamento simile

Vedere this thread per esempio, ot this one, sia su Cygwin.
Quale versione di Git stai usando (Git su Cygwin, o msysgit, in una sessione di Cygwin o una sessione di Dos?)

+1

La ragione per cui pongo questa domanda è di evitare le azioni superstiziose che possono o non possono aiutarmi, e in realtà capire la causa del mio problema. Quindi "la solita strategia è ripetere il comando git dopo aver chiuso il maggior numero possibile di applicazioni". è esattamente quello che non voglio fare. –

+2

@ Michael: ho capito. Mi spiace di aver trovato il consiglio * esatto * che non desideravi seguire;) – VonC

0

Si potrebbe provare Filemon da interni sys

5

Potrebbe essere la ricerca di Windows indicizzatore, che cerca fare file di indice in cui vengono creati. Mi sono imbattuto in questo problema con svn checkout e ho dovuto escludere quella directory dall'indicizzazione prima di poter eseguire correttamente il checkout di un progetto completo.

+2

L'interruzione dell'indicizzazione per la mia cartella repo ha risolto il problema per me. Windows Search Indexer è configurato per indicizzare la cartella Utenti per impostazione predefinita, quindi se il repository è memorizzato in "Documenti" o simili, questa potrebbe essere la causa. Istruzioni per escludere le directory: http://www.windowsnetworking.com/articles-tutorials/windows-7/Exploring-Windows-7s-New-Search-Features-Part2.html –

Problemi correlati