在Windows上的Git签出和重置偶尔会显示随机文件已经更改

通常当我检查一个不同的分支或重置时,我会从一个到十几个文件的窗口中获得“权限被拒绝”的错误 – 但是特定的文件因运行而异。 这是我刚做的一个testing的输出,GIT_TRACE = 1。 跟踪只在错误消息之前添加了一行:

 $ git checkout master
 trace:内置:git'checkout''master'
错误:git checkout-index:无法创build文件dotnet / src / myfile.cs(权限被拒绝)
 D dotnet / src / myfile.cs
切换到分支“主”

我很确定这是与我的机器上的病毒扫描程序或其他索引服务的比赛。 如果比赛持续,我可以使用sysinternals来查看文件句柄打开的过程。 但是,它发生得非常快,我不知道有一个工具可以显示我这个冲突。 令人惊讶的是,我还没有发现任何描述类似行为的人。 如何使这些错误停止,或进一步诊断问题?

我特别希望通过识别正在进行同时访问的任何进程来结束文件访问竞赛。 所以对于一个工具的build议,当编辑被拒绝时,显示哪个进程有一个文件locking将是非常有帮助的。 我知道'解锁'和类似的工具,它会告诉我什么过程中locking一段时间的文件。 这对于这个问题不起作用,因为这个过程使文件在很短的时间内保持locking状态。 所以这个工具需要在没有我干预的情况下收集适当的数据,因为我太慢了。

它可能是Windows搜索索引器,它会在创建索引文件时尝试做索引文件。 我遇到了这个问题与svn结帐,并不得不从索引中排除该目录,才能成功签出一个完整的项目。

看我的帖子https://connect.microsoft.com/VisualStudio/feedback/details/676699/cannot-open-linker-output-for-writing-or-cannot-close-file

不是混帐相关!

Sysinternals的进程监视器显示,Windows资源管理器会干扰新创建的文件,可能是由于某个插件或什么,但是它发生。

禁用UAC虚拟化似乎已经解决了这个问题。

请参阅http://code.google.com/p/msysgit/issues/detail?id=320

你可以从一开始:

GIT_TRACE=1 

但是,它可能不会显示比您关于此文件的原始信息多得多的信息。

通常的原因是一些打开的编辑器想要在更改时重新加载文件,这可能与git的文件操作冲突。
这意味着:通常的策略是在您关闭尽可能多的其他应用程序 重复您的git命令。

我还没有发现任何描述类似行为的人

比如Cygwin上的这个线程 。
你使用的是什么版本的Git(Cygwin上的Git,或Cygwin会话或Dos会话中的MSysGit?)

你可以从sys内部尝试Filemon