V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
suspended
V2EX  ›  git

请教: git diff 的 ^M 回车符是咋回事?

  •  
  •   suspended · 2018-01-12 13:57:55 +08:00 · 4102 次点击
    这是一个创建于 2286 天前的主题,其中的信息可能已经有所发展或是发生改变。

    repo 在 Github 上,本地是 macOS,改了几个字,diff 结果为啥会出现^M? 这个问题困扰很久了。

    git diff app.rb
    diff --git a/app.rb b/app.rb
    index fbf9bf3..afa8fd2 100755
    --- a/app.rb
    +++ b/app.rb
    @@ -85,9 +85,10 @@ Cuba.define do
               target
             end
           end
    +         res.headers['Access-Control-Allow-Origin'] = '*'^M
         end
    

    git version 2.1.4 @ macOS 10.12.6 git 未设置 core.eol ,也未设置 core.autocrlf

    9 条回复    2018-01-13 11:26:34 +08:00
    okletswin
        1
    okletswin  
       2018-01-12 14:08:52 +08:00
    windows 的\n\r
    Arnie97
        2
    Arnie97  
       2018-01-12 14:10:12 +08:00 via Android
    在你修改之前,版本库里的这个文件就已经是 CRLF 换行了。
    zo
        3
    zo  
       2018-01-12 14:28:37 +08:00
    如果是在 windows 下开发的话,会有回车换行的问题,表现在 git 上就是^M 了。
    当然 git 有个不是那么好用的智能转换,google 搜索 autocrlf 关键字,就可以看到为啥了。
    可以这样关掉:
    git config --global core.autocrlf false
    git config --global core.safecrlf false
    sutra
        4
    sutra  
       2018-01-12 16:20:04 +08:00
    @okletswin Windows 是 \r\n,不是 \n\r。
    sutra
        5
    sutra  
       2018-01-12 16:23:34 +08:00   ❤️ 1
    ^M 是 \r 即回车键。

    脱字符表示法( Caret notation )是对 ASCII 码不可打印的控制字符的一种表示法。用一个脱字符 (^)后跟一个大写字符来表示一个控制字符的 ASCII 码值。

    https://zh.wikipedia.org/wiki/%E8%84%B1%E5%AD%97%E7%AC%A6%E8%A1%A8%E7%A4%BA%E6%B3%95
    okletswin
        6
    okletswin  
       2018-01-12 19:11:09 +08:00
    @sutra 啊哈,我给记反了
    lawfun
        7
    lawfun  
       2018-01-12 21:21:32 +08:00 via Android
    我是加的 autocrlf true,然后 git diff 看不到 ^m 了,但是 git clone 其他代码时 会自动加 ^m 了,然后就会有问题了。
    suspended
        8
    suspended  
    OP
       2018-01-13 11:21:28 +08:00
    @okletswin @Arnie97
    不应该啊,如果文件本来就是 crlf 结尾,那么 vim 打开也会有一堆 ^M,但是并没有啊。
    suspended
        9
    suspended  
    OP
       2018-01-13 11:26:34 +08:00
    @okletswin @Arnie97

    好吧,你们是对的。。。我一直以为 vim 会显示 \r 为 ^M,刚才测试了一下发现是古代的 vi 才会显示。原来这个文件确实是 crlf 折行的。 - -b
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3268 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 13:40 · PVG 21:40 · LAX 06:40 · JFK 09:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.