windows 中同时使用 vscode 和 wsl git 命令行,每行代码被缀上 ^M 的问题

文章目录

    现在主力开发环境从 VIM 迁移到了 VSCode 下,但是在 WSL 命令行下使用 git 这个习惯一直改不掉,感觉 VSCode 里使用 git 不太方便。但是同时使用 VSCode 和 wsl git 遇到了一个 ^M 后缀的问题。

    复现步骤

    Windows 系统上,打开 vscode 编辑一个文件 a.md,在不关闭这个文件的情况下。在 wsl Ubuntu 下使用 git status 命令,会发现文件中的每行被加上了 ^M 后缀。

    > git status
    On branch main
    Changes not staged for commit:
            modified:   a.md
    

    git diff

    会看到,除了最后一行,每行被加上了 ^M 后缀。

    > git diff
    --- a/a.md
    +++ b/a.md
    -hello
    +hello^M
     world
    

    ^M 是什么

    ^M 代表的是回车符 CR,也就是 \r。

    • 在 Unix 系统中,换行符是 LF(\n)
    • 而 Windows 默认使用 CRLF(\r\n)

    不同系统中的默认 autocrlf 配置

    Windows 下返回 true

    C:\Users\Lenovo>git config core.autocrlf
    true
    

    WSL Ubuntu Linux 下无返回

    > git config core.autocrlf
    

    返回值及含义

    • true 检出时自动转换 LF → CRLF,提交时转换 CRLF → LF(适合 Windows)
    • input 提交时转换 CRLF → LF,但检出时不转换(适合跨平台协作)
    • false 禁用自动换行符转换(可能导致混合换行符问题)
    • 无输出 未配置此选项,Git 默认不自动处理换行符

    如何规避

    关闭 vscode 时,使用 git status 就不会出现这个问题。

    说明 ^M 是 VSCode 自动实时给加上的。

    结论

    两方都对,不需要配置。

    避免同时使用就行了,使用 vscode terminal 中的 git 命令就行。

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式