通常当我检查不同的分支或重置时,我会从一个到十几个文件的窗口中获得“权限被拒绝”错误 - 但是特定文件因运行而异。这是我刚刚做过的测试的输出,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来查看文件句柄打开的进程。但是,它发生得很快,我不知道有一个工具可以告诉我这个冲突。令人惊讶的是,我没有发现任何描述类似行为的人。 如何使这些错误停止或进一步诊断问题?
我特意希望通过识别正在进行同步访问的进程来结束文件访问竞争。因此建议使用一个工具来显示在编辑被拒绝时哪个进程有文件被锁定的工具非常有帮助。我知道'解锁器'和类似的工具会告诉我哪个进程持有文件锁定一段时间。这不适用于此问题,因为该过程会在非常短的时间内锁定文件。所以该工具需要在没有我干预的情况下收集适当的数据,因为我太慢了。
答案 0 :(得分:5)
它可能是Windows搜索索引器,它会在创建索引文件时尝试执行索引文件。我使用svn checkout遇到了这个问题,并且在成功签出整个项目之前必须从索引中排除该目录。
答案 1 :(得分:5)
没有git相关!
Sysinternals的进程监视器显示Windows资源管理器干扰了新创建的文件,可能是由于某些插件或什么,但它发生了。
答案 2 :(得分:3)
禁用UAC虚拟化似乎解决了这个问题。
答案 3 :(得分:1)
您可以从:
开始 GIT_TRACE=1
但它可能不会显示有关此文件的原始消息。
通常的原因是一些打开的编辑器想要在更改时重新加载文件,这可能与git的文件操作冲突。
这意味着:通常的策略是在关闭之后重复你的git命令尽可能多的其他应用程序。
我没有找到任何描述类似行为的人
例如,在Cygwin上查看this thread,ot this one 您使用的是什么版本的Git(Cygwin上的Git或MSysGit,在Cygwin会话或Dos会话中?)
答案 4 :(得分:0)
您可以在sys internals
中尝试Filemon