Часто, когда я делаю извлечение из другой ветки или сбрасываю, я получаю ошибки «отказано в разрешении» из окон для одного до дюжины файлов, но конкретные файлы меняются от запуска к запуску. Вот результат теста, который я только что сделал, с 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, чтобы увидеть, в каком процессе открыт дескриптор файла. Однако это происходит очень быстро, и я не знаю инструмента, который покажет мне этот конфликт. Удивительно, но я не нашел никого, описывающего подобное поведение.
Как я могу остановить эти ошибки или диагностировать проблему дальше?
Я специально пытаюсь покончить с гонкой за доступом к файлу, указав, какой процесс выполняет одновременный доступ. Поэтому предложения по инструменту, показывающему, какому процессу заблокирован файл при отклонении редактирования, будут очень полезно. Я знаю о «разблокировщике» и подобных инструментах, которые покажут мне, какой процесс удерживает файл заблокированным в течение определенного периода времени. Это не работает для этой проблемы, потому что процесс держит файл заблокированным в течение очень короткого периода. Поэтому инструмент должен собирать соответствующие данные без моего вмешательства, так как я слишком медленный.