0

我在 Windows 10 下将 ExamDiff Pro 与 git 一起用于 Windows。

当我运行时git difftool --dir-diff <branch1> <branch2>,会弹出 EDP 的目录比较屏幕,显示不同的文件,但随后我开始弹出文件已更改的弹出窗口,提示我重新比较。

我不知道问题出在我的 git 设置(如下)、ExamDiff 还是 Windows 上。

[core]
    autocrlf = true
    fscache = true
    symlinks = false
    useBuiltinFSMonitor = true
    compression = 0

[diff]
    tool = edp
    guitool = edp

[difftool "edp"]
    path = "C:\\Program Files\\ExamDiff Pro\\ExamDiff.exe"
    cmd = "\"C:\\Program Files\\ExamDiff Pro\\ExamDiff.exe\" \"$LOCAL\" \"$REMOTE\" -nh -r2"
    trustExitCode = false
4

1 回答 1

0

我弄清楚发生了什么事。

我使用 SysInternals Process Monitor 来查看哪些进程访问这些文件。事实证明,这些文件是由两个进程访问的:Windows Defender 和(显然)ExamDiff。

发生的情况是,一旦 git 将文件复制到临时文件夹,Windows Defender 就会开始在后台扫描它们。

现在,防病毒软件不应该修改它扫描的文件,但显然它会通过更改文件的扩展属性来修改:

MsSense.exe,6168,SetEAFile,C:\Temp\git-difftool.a35220\right\Dir1\Dir2\Dir3\File.cpp,SUCCESS,

这不应该以任何方式影响比较,但显然它会触发目录更改通知

ExamDiff.exe,22236,NotifyChangeDirectory,C:\Temp\git-difftool.a35220\right,SUCCESS,"Filter: FILE_NOTIFY_CHANGE_FILE_NAME, FILE_NOTIFY_CHANGE_DIR_NAME, FILE_NOTIFY_CHANGE_ATTRIBUTES, FILE_NOTIFY_CHANGE_SIZE, FILE_NOTIFY_CHANGE_LAST_WRITE, FILE_NOTIFY_CHANGE_CREATION, FILE_NOTIFY_CHANGE_SECURITY"

我们有了它:ExamDiff 正在侦听目录更改(文件内容或元数据),以提醒用户目录已更改。它不关心 NTFS 扩展属性的变化,不(或不能)将其过滤掉。

我想知道 Win32 中是否有一种方法可以检查更改是否不影响扩展属性以外的任何内容(不保存文件夹的状态并进行比较),但这是一个不同的问题。

编辑:找到一个链接: https ://social.technet.microsoft.com/Forums/en-US/c900b28d-4281-4a98-b6ca-418cf84f3cab/microsoft-defender-atp-mssenseexe-is-creating-extended-attributes

于 2022-02-16T02:01:39.707 回答