所以我认为它可能与textmate有关,但是我们在一个小团队中工作,并且在git中存在几个相同文件的完整文件冲突的问题,因为一个分支的每一行都附加了^ M
这个神秘的^M
角色应该做什么,它可能来自哪里?
我们的开发人员在Windows / Mac上使用emacs,在Mac上使用TextMate,在Mac上使用coda,偶尔使用wp-admin文本编辑器。
任何人都有这个问题源于其中一个吗?
答案 0 :(得分:97)
在git-config中,将core.autocrlf
设置为true
以使git自动为您的平台正确转换行结尾,例如运行此命令以进行全局设置:
git config --global core.autocrlf true
答案 1 :(得分:90)
Someone is not converting their line-ending characters correctly
我认为这是Windows用户,因为他们喜欢他们的CRLF。 Unix喜欢LF,Mac喜欢CR,直到用unix方式显示它。
答案 2 :(得分:28)
^M
是0x0d
,即回车符。如果您的显示器看起来像
line 1^M line 2^M
然后该文件必须来自Windows,因为Windows上的标准换行序列为CR
LF
(0x0d 0x0a
),而标准换行序列仅包含LF
的Unices。
如果文件来自Mac OS 9或更早版本的系统,您会将其视为
line 1^Mline 2^M
因为回车后没有换行符。
答案 3 :(得分:13)
要使^ M在git中消失,请输入:
git config --global core.whitespace cr-at-eol
现金: https://lostechies.com/keithdahlby/2011/04/06/windows-git-tip-hide-carriage-return-in-diff/
答案 4 :(得分:8)
它们与DOS风格的行结尾和Unix风格之间的区别有关。查看Wikipedia article。您可以找到dos2unix工具来帮助,或者只是编写一个小脚本来自行修复它们。
修改:我找到了以下Python示例代码here:
string.replace( str, '\r', '' )
答案 5 :(得分:6)
代替查询替换你也可以使用 M-x delete-trailing-whitespace
答案 6 :(得分:4)
^M
表示回车符(\ r)后跟换行符(\ n)。如果一个人在Windows上编辑文件(行尾是回车符和换行符的组合),你会经常看到这一点,你可以在Unix或Linux中编辑(行尾只是换行符)。
角色组合通常无害。如果您正在使用源代码管理,则可以配置文本文件签入格式,以便为您神奇地调整行。或者,您可以使用签入和签出触发器来自动“修复”文件。或者,您可以使用dos2unix之类的工具手动调整内容。
答案 7 :(得分:4)
在~/.emacs
(或等效的)
(defun dos2unix ()
"Replace DOS eolns CR LF with Unix eolns CR"
(interactive)
(goto-char (point-min))
(while (search-forward "\r" nil t) (replace-match "")))
然后您就可以使用M-x dos2unix
。
答案 8 :(得分:4)
我在 Mac OS 上使用 Android Studio (JetBrains IntelliJ IDEA ),我的问题是^ M开始显示在 GitHub 的拉取请求中的某些文件中。 对我有用的是更改文件的行分隔符。
在编辑器中打开所需文件转到 文件转到 行分隔符然后 为您选择最佳选择 (对我来说,它是 LF - Unix和OS X(\ n))
根据下一篇文章,这个问题是操作系统之间的行结尾混淆的结果: http://jonathonstaff.com/blog/issues-with-line-endings/
您可以在此处找到更多信息: https://www.jetbrains.com/help/idea/configuring-line-separators.html#d84378e48
答案 9 :(得分:2)
正如大家都提到的那样。这是不同的线条结束风格。 MacOSX使用Unix行结尾 - 即LF(换行)。
Windows同时使用CR(回车)和& LF(换行)作为行尾。 因为你使用的是windows和mac那就是问题所在。
如果您在Windows中创建文件然后将其带到Mac上,您可能会在行尾看到这些^ M个字符。
如果要删除它们,可以在emacs中轻松完成。只需突出显示并复制^ M字符,然后执行查询替换^ M,并完成。
编辑: 其他一些可能有帮助的链接。 http://xahlee.org/emacs/emacs_adv_tips.html
这个可以帮助您配置emacs以使用特定类型的行结束样式。 http://www.emacswiki.org/emacs/EndOfLineTips
答案 10 :(得分:1)
我不久前遇到了这个问题。 ^ M表示回车符,并且在Ctrl-Q Ctrl-M
上搜索(这会创建一个文字^ M)将允许您在Emacs中获得此角色的句柄。我沿着这些方向做了一些事情:
M-x replace-string [ENTER] C-q C-m [ENTER] \n [ENTER]
答案 11 :(得分:1)
答案 12 :(得分:1)
如果您的系统上没有安装dos2unix实用程序,您可以创建自己的实用程序来删除Windows结束字符:
vi ~/dos2unix.bash:
包含以下内容
#!/bin/bash
tr -d '\r' < $1 > repl.tmp
mv -f repl.tmp $1
在〜/ .bashrc中,添加以下行:
alias 'dos2unix=~/dos2unix.bash'
申请
dos2unix file_from_PC.txt
将删除file_from_PC.txt中行尾的^ M个字符。你可以使用cat来检查你是否有这些:
cat -v file_from_PC.txt
答案 13 :(得分:0)
对我来说,解决方案是使用此Emacs Wiki Article中的以下elisp函数。
(defun dos2unix ()
"Not exactly but it's easier to remember"
(interactive)
(set-buffer-file-coding-system 'unix 't) )
在缓冲区上执行功能M-x dos2unix
并保存文件,所有^M
将消失。
答案 14 :(得分:0)
仅使用emacs命令单行代码即可摆脱^ Ms的最直接方法之一:
C-x h C-u M-| dos2unix
分析:
C-x h: select current buffer
C-u: apply following command as a filter, redirecting its output to replace current buffer
M-| dos2unix: performs `dos2unix` [current buffer]
* nix平台开箱即用的dos2unix
实用程序,包括Mac(带有brew
)。在Windows下,它也广泛可用(MSYS2,Cygwin,user-contributed等)。