【问题标题】:What is the meaning of ^M in 'git diff'?'git diff'中的^M是什么意思?
【发布时间】:2016-07-27 19:10:30
【问题描述】:

我在分叉和上游 Bitbucket 存储库之间区分文件:

$ git diff origin/branchA..upstream/branchB -- some/file/path.xyz

似乎几乎每个文件都返回相同的差异:

-<U+FEFF>@using Sitecore.Mvc
+@using Sitecore.Mvc^M

仅在第一行之后出现的^M 的确切含义是什么?当我比较其他文件时,我也看到了这个问题。我在Windows Server 2008 R2 机器上。 core.autocrlf 设置为 true。 .gitattributes 设置为text eol=lf。我的 Git 版本是 2.5.1.windows.1。

【问题讨论】:

    标签: git line-endings


    【解决方案1】:

    ^M 代表carriage return。这个差异意味着有些东西从行首删除了一个Unicode BOM,并在最后添加了一个CR。

    ^ 符号代表 Control,所以 ^M 表示 Ctrl+M

    要从它到实际的 ASCII 字符代码,您需要获取基本字符并翻转第 6 位(即与 64 进行异或)。对于字母,这只是意味着减去 64。例如^A 是字符代码 1(因为 A 是 65)。 ^M 是 77 - 64 = 13(因为M 是 77),对应 ASCII 中的回车。

    【讨论】:

    • 我喜欢这样的“教人钓鱼”的答案。我现在不仅了解^M,而且还可能了解我将来可能遇到的任何其他此类控制字符。
    • git config core.whitespace cr-at-eol 从差异中隐藏它
    【解决方案2】:

    ^M 开始出现在我身边,因为我的系统(linux 子系统)上没有安装 npm

    一旦我安装了 npm 并执行了 sudo apt update,所有的 ^M 都消失了。

    不确定您是否遇到这种情况,但这是一个可能的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      相关资源
      最近更新 更多