Git Checkout и сброс в Windows иногда показывает, что случайные файлы были изменены - PullRequest
8 голосов
/ 31 июля 2009

Часто, когда я делаю извлечение из другой ветки или сбрасываю, я получаю ошибки «отказано в разрешении» из окон для одного до дюжины файлов, но конкретные файлы меняются от запуска к запуску. Вот результат теста, который я только что сделал, с GIT_TRACE = 1. В трассировку добавляется только одна строка перед сообщением об ошибке:

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

Я почти уверен, что это какая-то гонка со сканером вирусов или другим сервисом индексирования на моей машине. Если бы гонка продолжалась, я мог бы использовать sysinternals, чтобы увидеть, в каком процессе открыт дескриптор файла. Однако это происходит очень быстро, и я не знаю инструмента, который покажет мне этот конфликт. Удивительно, но я не нашел никого, описывающего подобное поведение. Как я могу остановить эти ошибки или диагностировать проблему дальше?

Я специально пытаюсь покончить с гонкой за доступом к файлу, указав, какой процесс выполняет одновременный доступ. Поэтому предложения по инструменту, показывающему, какому процессу заблокирован файл при отклонении редактирования, будут очень полезно. Я знаю о «разблокировщике» и подобных инструментах, которые покажут мне, какой процесс удерживает файл заблокированным в течение определенного периода времени. Это не работает для этой проблемы, потому что процесс держит файл заблокированным в течение очень короткого периода. Поэтому инструмент должен собирать соответствующие данные без моего вмешательства, так как я слишком медленный.

Ответы [ 5 ]

5 голосов
/ 20 июля 2011

см. Мой пост https://connect.microsoft.com/VisualStudio/feedback/details/676699/cannot-open-linker-output-for-writing-or-cannot-close-file

Не относится к мерзавцу!

Монитор процессов Sysinternals показывает, что проводник Windows создает помехи для вновь созданных файлов, возможно, из-за какого-то плагина или чего-то еще, но это происходит.

5 голосов
/ 16 мая 2011

Это может быть индексатор поиска Windows, который пытается индексировать файлы по мере их создания. Я столкнулся с этой проблемой с svn checkout, и мне пришлось исключить этот каталог из индексации, прежде чем я смог успешно оформить полный проект.

3 голосов
/ 11 ноября 2009

Отключение виртуализации UAC, похоже, решило проблему.

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

1 голос
/ 31 июля 2009

Вы можете начать с:

 GIT_TRACE=1

Но он может отображать не больше, чем ваше оригинальное сообщение об этом файле.

Обычная причина - какой-то открытый редактор, который хочет перезагрузить файлы при изменении, и это может конфликтовать с манипуляциями с файлами в git.
Это означает: обычная стратегия состоит в том, чтобы повторять вашу команду git после , закрыв столько других приложений, сколько вы можете .

Я не нашел никого, описывающего подобное поведение

См., Например, этот поток , этот , оба на Cygwin.
Какую версию Git вы используете (Git на Cygwin или MSysGit, в сеансе Cygwin или в сеансе Dos?)

0 голосов
/ 16 сентября 2009

Вы можете попробовать Filemon из sys internals

...