Git新克隆仓库后部分crlf文件显示已修改的问题求助
Git克隆后CRLF相关文件显示已修改的问题解决
问题原因
你的core.autocrlf=input配置会让Git对所有识别为文本的文件执行:提交时将CRLF转换为LF存储,检出时不做转换。但LLVM仓库里这些带crlf后缀的文件是专门用来测试CRLF换行逻辑的测试用例,它们的原生格式就是CRLF。Git的自动文本检测把这些文件当成普通文本,应用了换行符转换规则,导致工作区文件的换行符和仓库存储的版本不一致,所以刚克隆就显示已修改。
可行解决办法
方法一:标记特定文件为二进制(推荐,本地/仓库都适用)
直接恢复文件原始状态,同时让Git不再处理这些文件的换行符:
# 恢复这些文件到仓库原始版本 git checkout HEAD -- llvm/test/MC/AsmParser/preserve-comments-crlf.s llvm/test/tools/llvm-mca/X86/directives-handle-crlf.s llvm/test/tools/split-file/Inputs/basic-aa.crlf llvm/test/tools/split-file/Inputs/basic-bb.crlf llvm/test/tools/split-file/basic.crlf.test # 在本地.gitattributes中添加规则,标记这些文件为二进制 echo "llvm/test/MC/AsmParser/preserve-comments-crlf.s binary" >> .gitattributes echo "llvm/test/tools/llvm-mca/X86/directives-handle-crlf.s binary" >> .gitattributes echo "llvm/test/tools/split-file/Inputs/basic-aa.crlf binary" >> .gitattributes echo "llvm/test/tools/split-file/Inputs/basic-bb.crlf binary" >> .gitattributes echo "llvm/test/tools/split-file/basic.crlf.test binary" >> .gitattributes
如果有仓库提交权限,可以把.gitattributes的修改提交上去,避免其他克隆用户遇到同样问题:
git add .gitattributes git commit -m "Mark CRLF test files as binary to skip newline conversion"
方法二:全局配置避免处理CRLF相关文件
如果经常克隆这类包含CRLF测试用例的仓库,可以设置全局规则,让Git自动把文件名含crlf的文件识别为二进制:
# 创建全局属性文件 git config --global core.attributesfile ~/.gitattributes_global # 添加规则 echo "*crlf* binary" >> ~/.gitattributes_global
方法三:重新标准化仓库换行符(谨慎使用)
如果仓库整体换行符规则混乱,且确认可以修改所有文本文件的换行符,可以用以下命令统一标准化,但会破坏CRLF测试用例的原生格式,不推荐用于当前场景:
git add --renormalize . git commit -m "Renormalize all line endings in repository"
内容的提问来源于stack exchange,提问作者vam
相关产品推荐
相关产品推荐

