起因是最近用git subtree组了一个monorepo仓库出来,得益于1000+的commit数以及公司的奇特网路使用机器拉代码十分慢。
于是将拉好项目的.git文件从mac上转到了公司的win机器上,这个时候发现仓库中有几个没有改动的文件出现在vscode的文件管理中的change上,而且怎么撤销都是失败。
这里收集到可能的原因:
1. 行尾符问题
- 问题:文件的行尾符在 Windows(CRLF) 和 Unix(LF) 之间转换
- 解决:
在项目根目录执行
Plain1git config core.autocrlf false
2. 文件权限变化
- 问题:文件的可执行权限发生了变化
- 解决:
Plain1git config core.filemode false
3. 编码问题
- 问题:文件编码被自动转换
- 解决:
Plain1git config core.safecrlf warn
我在一通处理后,定位到问题是 文件权限变化
这里可能的问题根源在:
当你在 Linux/macOS 系统或 WSL 中工作时:
- Git 默认会跟踪文件的 可执行权限(755 vs 644)
- 如果用 chmod 或其他方式改变了文件权限
- Git 会检测到这种变化并显示在变更列表中