代码之家  ›  专栏  ›  技术社区  ›  Michael Donohue Reno

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

  •  8
  • Michael Donohue Reno  · 技术社区  · 15 年前

    通常,当我对不同的分支进行签出或重置时,我会从Windows中得到一到十几个文件的“拒绝权限”错误,但特定的文件在运行过程中会有所不同。这是我刚做的测试的输出,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 回复  |  直到 13 年前
        1
  •  5
  •   mynameistechno    13 年前

    它可能是Windows搜索索引器,它尝试在创建文件时对其进行索引。我在SVN签出中遇到了这个问题,在成功签出完整的项目之前,必须将该目录从索引中排除。

        2
  •  5
  •   Andreas Vergison    13 年前

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

    与Git无关!

    SysInternals的进程监视器显示Windows资源管理器会干扰新创建的文件,可能是由于某些插件或什么原因,但会发生这种情况。

        3
  •  3
  •   Michael Donohue Reno    15 年前

    禁用UAC虚拟化似乎解决了问题。

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

        4
  •  1
  •   VonC    15 年前

    您可以从以下内容开始:

     GIT_TRACE=1
    

    但它显示的信息可能不会超过关于这个文件的原始信息。

    通常的原因是一些打开的编辑器希望在更改时重新加载文件,这可能与Git的文件操作冲突。
    这意味着:通常的策略是重复git命令 之后 有密切关系 尽可能多的其他应用程序 .

    我没发现有人描述过类似的行为

    this thread 例如,OT this one 两个都在Cygwin上。
    您使用的Git版本是什么(Cygwin上的Git,或Cygwin会话或DOS会话中的MSysGit?)

        5
  •  0
  •   Tim Abell    15 年前

    你可以试试 Filemon 来自系统内部