SSH克隆Git仓库后文件莫名显示已修改,求正确克隆/检出方法
这种情况我碰到过好多次,大概率是换行符自动转换或者文件权限检测的锅,不用慌,咱们一步步拆解解决:
一、最常见的元凶:换行符格式不统一
Windows系统默认用CRLF(回车+换行),而Linux/macOS用LF(换行)。Git默认会自动在克隆时转换换行符,导致所有文件被标记为“已修改”——其实只是换行符格式变了,你根本没改代码。
修复当前仓库的方法:
- 先重置仓库,清除错误的修改标记:
git reset --hard - 配置当前仓库的换行符规则,禁止自动转换:
git config core.autocrlf false git config core.eol lf # 推荐统一用LF,跨平台更友好;Windows用户也可以选crlf - 再重置一次,确保文件格式正确:
这时候再跑git reset --hardgit status,应该就显示“nothing to commit, working tree clean”了。
全局配置,一劳永逸避免后续仓库出问题:
git config --global core.autocrlf false git config --global core.eol lf
二、另一个常见原因:文件权限检测
Git默认会跟踪文件的执行权限变化,比如克隆后文件的x权限被自动调整,Git就会误判为文件被修改。
修复当前仓库:
- 先重置清除标记:
git reset --hard - 关闭当前仓库的权限检测:
git config core.filemode false - 验证:执行
git status,修改标记应该消失了。
全局配置:
git config --global core.filemode false
三、正确的克隆/检出姿势
想要从根源避免这个问题,建议先做好全局配置,再克隆仓库:
- 先设置全局Git规则(只需要做一次):
# 关闭自动换行符转换,统一用LF git config --global core.autocrlf false git config --global core.eol lf # 关闭文件权限检测 git config --global core.filemode false - 然后正常克隆仓库:
git clone <repo-url> - 如果是已经克隆好的仓库,直接用前面的仓库级配置命令修复即可。
极少数情况下,core.safecrlf配置过于严格也会导致类似问题,但上面的方法已经能解决99%的场景了。
内容的提问来源于stack exchange,提问作者KRUSHANU MOHAPATRA
相关产品推荐
相关产品推荐

