VS2017与GitHub协作时.cpp被识别为二进制文件无法显示Diff求助
解决VS2017中GitHub协作时.cpp文件被识别为二进制无法显示Diff的问题
我之前也碰到过几乎一模一样的情况,折腾了好一阵才解决,给你几个实用的排查和解决方向:
1. 确保.gitattributes的配置正确且生效
- 首先确认文件放在仓库根目录,不是项目子文件夹里——我之前就犯过这个错,放错位置等于白配置。
- 文件内容要准确,建议直接写:
加上*.cpp text diffdiff是明确告诉Git用文本对比规则,避免歧义。如果之前需要指定换行符,也可以合并进去:*.cpp text eol=lf diff
2. 清除Git缓存重新追踪文件
Git会缓存文件的属性信息,就算改了.gitattributes,已追踪的文件可能还是保持旧的二进制标记。执行以下命令重置:
git rm --cached -r . git add . git commit -m "Fix cpp files being treated as binary by Git"
这个操作会把所有文件从缓存移除,再根据新的.gitattributes重新添加,让新配置生效。
3. 检查文件编码是否带BOM
VS有时候会偷偷给UTF-8文件加BOM(字节顺序标记),这会让Git误判为二进制:
- 打开你的.cpp文件,点击VS顶部菜单的「文件」→「高级保存选项」
- 确认编码选择的是「UTF-8 无签名」,而不是「UTF-8 带签名」
- 保存后再重复步骤2的Git命令,重新提交文件
4. 排查VS2017 Git插件的问题
如果命令行里git diff能正常显示文本对比,但VS里还是显示“Binary files are not shown”,那大概率是VS插件的问题:
- 关闭VS,删除项目根目录下的
.vs隐藏文件夹(里面是VS的缓存文件) - 重新打开项目,刷新Git面板查看Diff
- 如果还是不行,尝试把VS2017更新到最新的补丁版本,或者重置VS的Git相关设置(「工具」→「导入和导出设置」→「重置所有设置」)
验证配置是否生效
可以用Git命令检查单个文件的属性,确认文本标记已设置:
git check-attr --all your-file.cpp
如果输出里有text: set和diff: set,说明配置已经生效了。
内容的提问来源于stack exchange,提问作者user1768788
相关产品推荐
相关产品推荐

