我正在做Windows中的回购.Repo最初是在Mac上创建的,其中all个文件仅使用LF作为行尾.当我在另一台Mac上克隆repo时,我看到所有文件都以LF作为行尾.当我在Windows上克隆时,some个文件(但不是所有文件)的行尾都是CRLF.core.autocrlf设置为FALSE.在git check-attr -a foo中判断的文件上没有任何属性.如果我参选:

git rev-parse HEAD:foo   # Outputs "abc123...abc"
git cat-file -p "abc123...abc" | xxd

然后我看到了带有LF结尾的文件.(在发现git cat-file -p ... > temp.txt将编码更改为UTF-16后,我在Windows上安装了xxd,以尽量减少可能引入错误的工具)

git status表示foo没有变化.如果我将foo中的行尾从CRLF转换为LF,则git status显示有变化.即使文件应该只有LF.

如果我在Windows上进入WSL并运行git status,那么它会显示所有文件,其中包含错误的CRS,它们被更改了.然而,"Git Bash"给出的结果与Windows相同.

这到底是怎么回事?如何让Git停止更改我的行尾?

推荐答案

如果没有设置,它会做什么?如果您可以将此添加为专用答案

这就是《How line ending conversions work with git core.autocrlf between different operating systems》中所解释的.

它确认Windows上core.autocrlf 的默认值为true.

╔═══════════════╦══════════════╦══════════════╦══════════════╗
║ core.autocrlf ║     false    ║     input    ║     true     ║
╠═══════════════╬══════════════╬══════════════╬══════════════╣
║               ║ LF   => LF   ║ LF   => LF   ║ LF   => CRLF ║
║ git checkout  ║ CR   => CR   ║ CR   => CR   ║ CR   => CR   ║
║               ║ CRLF => CRLF ║ CRLF => CRLF ║ CRLF => CRLF ║
╠═══════════════╬══════════════╬══════════════╬══════════════╣
║               ║ LF   => LF   ║ LF   => LF   ║ LF   => LF   ║
║ git commit    ║ CR   => CR   ║ CR   => CR   ║ CR   => CR   ║
║               ║ CRLF => CRLF ║ CRLF => LF   ║ CRLF => LF   ║
╚═══════════════╩══════════════╩══════════════╩══════════════╝

Linux相关问答推荐

一个bash脚本,用于基于2列映射文件替换多个文件名中的模式

如何将参数传递给Bash函数

如何修复 script(1) 实用程序输出的换行符?

无法在嵌入式 Linux 中使用 libjpeg 以 RGB888 在 LCD(黑色)上显示 JPEG

替换前 3 个字符范围内的所有整数

编译过度对齐的动态分配变量时出现 icpc 错误

判断指定名称的画面是否存在

如何使用 sed debug调试正则表达式?

如何在 linux 上为 JNI 应用程序编译动态库?

如何有效地使用 grep?

来自远程主机的 mysqldump

通过写入 /dev/input/mice 来控制鼠标

将 bash 脚本添加到路径

在 Linux 上用 C 语言读写串口

Colored shell 脚本输出库

在 shell 脚本的 for 循环中迭代行而不是单词

在linux上上几个目录

在 reverse-i-search (Ctrl+R ) , 历史上类似命令之间切换的任何方法

获取本地时区的 Olson TZ 名称?

如何通过 xmllint 使用 XSD 验证 XML 文件