2009-07-30 4 views
8

Souvent quand je fais un checkout d'une branche différente, ou une réinitialisation, j'obtiendrai des erreurs «permission refusée» de Windows pour un à une douzaine de fichiers - mais le particulier les fichiers varient d'une exécution à l'autre. Voici la sortie d'un test que je viens de faire, avec GIT_TRACE = 1. La seule trace a ajouté une ligne avant que le message d'erreur:Git checkout et réinitialiser sur Windows montre parfois des fichiers aléatoires ont changé

 
$ 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" 

Je suis assez sûr que ce soit une course avec un scanner de virus ou tout autre service d'indexation sur ma machine. Si la course persistait, je pourrais utiliser sysinternals pour voir quel processus a ouvert le handle de fichier. Cependant, cela arrive très vite, et je ne suis pas au courant d'un outil qui me montrera ce conflit. Étonnamment, je n'ai trouvé personne décrivant un comportement similaire. Comment faire pour que ces erreurs s'arrêtent, ou diagnostiquer le problème plus loin?

Je cherche spécifiquement à mettre fin à la course d'accès aux fichiers en identifiant tout processus faisant l'accès simultané. Donc, des suggestions pour un outil qui montre quel processus a un fichier verrouillé lorsqu'une modification est refusée serait très utile. Je suis conscient de 'unlocker' et des outils similaires qui me montreront quel processus détient un fichier verrouillé pendant une période de temps. Cela ne fonctionne pas pour ce problème, car le processus conserve le fichier verrouillé pendant une période très courte. L'outil doit donc collecter les données appropriées sans mon intervention, car je suis trop lent.

Répondre

3

Désactivation UAC La virtualisation semble avoir fixé le problème.

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

+1

Notez également le commentaire # 16 là. Mettre votre repo sur une partition non-système résout également le problème. http://code.google.com/p/msysgit/issues/detail?id=320#c16 –

1

Vous pouvez commencer par un:

GIT_TRACE=1 

Mais il peut ne pas afficher beaucoup plus que votre message d'origine en ce qui concerne ce dossier.

La cause habituelle est un éditeur ouvert qui veut recharger les fichiers lorsqu'il est modifié, et qui peut entrer en conflit avec les manipulations de fichiers de git.
Cela signifie: la stratégie habituelle est de répéter votre commande git après ayant près autant d'autres applications que vous pouvez.

Je n'ai pas trouvé quelqu'un qui décrit un comportement similaire

Voir this thread par exemple, ot this one, tant sur Cygwin.
Quelle version de Git vous utilisez (Git sur Cygwin, ou msysGit, dans une session Cygwin ou une session Dos?)

+1

La raison pour laquelle je pose cette question est d'éviter les actions superstitieuses qui peuvent ou ne peuvent pas m'aider, et de comprendre la cause de mon problème. Donc "la stratégie habituelle est de répéter votre commande git après avoir fermé autant d'autres applications que vous le pouvez." est exactement ce que je ne veux pas faire. –

+2

@Michael: Je comprends. Désolé d'avoir trouvé le * exact * conseil que vous ne vouliez pas suivre;) – VonC

0

Vous pouvez essayer Filemon de sys internes

5

Il pourrait être Windows Search Indexer, qui essaie faire des fichiers d'index comme ils sont créés. Je suis tombé sur ce problème avec svn checkout et j'ai dû exclure ce répertoire de l'indexation avant de pouvoir récupérer un projet complet.

+2

La désactivation de l'indexation de mon dossier repo a résolu ce problème pour moi. Windows Search Indexer est configuré pour indexer votre dossier Utilisateurs par défaut, donc si votre dépôt est stocké dans "Mes documents" ou similaire, cela pourrait être la cause. Instructions pour l'exclusion des répertoires: http://www.windowsnetworking.com/articles-tutorials/windows-7/Exploring-Windows-7s-New-Search-Features-Part2.html –

Questions connexes