复制文件后Git无法检测到修改的问题求助
Git无法检测二进制文件修改的解决方案
问题场景
- Scr文件夹为Git仓库,Changes为普通Windows文件夹
- 文件先导出至Changes,再复制到Scr,Changes内所有文件均为新增或修改状态
- 确认复制到Scr的文件确实处于修改状态,但Git仅能检测新增文件,无法稳定识别二进制文件的修改
- 已通过Git参数标记二进制文件,执行
git update-index --really-refresh无效果
可行解决方案
1. 强制Git对比文件内容
Git默认优先通过文件修改时间(mtime)和大小判断变化,Windows复制操作可能导致mtime未更新,可强制Git跳过元数据检查,直接验证内容哈希:
# 单个文件 git update-index --assume-unchanged --no-assume-unchanged <目标文件路径> # 批量处理仓库内所有文件 git ls-files -z | xargs -0 git update-index --assume-unchanged --no-assume-unchanged
2. 手动更新索引
直接强制将修改的二进制文件加入索引,触发Git检测:
# 单个二进制文件 git add -f <二进制文件路径> # 批量处理所有已修改文件 git add -f $(git ls-files --modified)
注:-f参数会强制覆盖Git忽略规则(若存在),确保文件被索引更新。
3. 调整Git检测配置
修改Git全局或仓库配置,降低对文件元数据的依赖:
# 忽略文件创建时间,避免Windows系统的时间异常干扰 git config core.trustctime false # 减少元数据检查,优先验证内容哈希 git config core.checkstat minimal
4. 确保复制时保留文件修改时间
使用Windows自带的robocopy命令复制文件,保留完整文件属性(包括修改时间):
robocopy Changes Scr /E /COPYALL
内容的提问来源于stack exchange,提问作者Joel Arys
相关产品推荐
相关产品推荐

