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

2018-01-12 13:57:55 +08:00
 suspended

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

4117 次点击
所在节点    git
9 条回复
okletswin
2018-01-12 14:08:52 +08:00
windows 的\n\r
Arnie97
2018-01-12 14:10:12 +08:00
在你修改之前,版本库里的这个文件就已经是 CRLF 换行了。
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
2018-01-12 16:20:04 +08:00
@okletswin Windows 是 \r\n,不是 \n\r。
sutra
2018-01-12 16:23:34 +08:00
^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
2018-01-12 19:11:09 +08:00
@sutra 啊哈,我给记反了
lawfun
2018-01-12 21:21:32 +08:00
我是加的 autocrlf true,然后 git diff 看不到 ^m 了,但是 git clone 其他代码时 会自动加 ^m 了,然后就会有问题了。
suspended
2018-01-13 11:21:28 +08:00
@okletswin @Arnie97
不应该啊,如果文件本来就是 crlf 结尾,那么 vim 打开也会有一堆 ^M,但是并没有啊。
suspended
2018-01-13 11:26:34 +08:00
@okletswin @Arnie97

好吧,你们是对的。。。我一直以为 vim 会显示 \r 为 ^M,刚才测试了一下发现是古代的 vi 才会显示。原来这个文件确实是 crlf 折行的。 - -b

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/422358

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX