Jac*_*IRR 2 windows git line-endings bitbucket
首先,什么是M-oM-;M-??
当我将提交推送到 bitbucket 时,有人使用在线编辑器进行小更改,它会将第一行更改为:
<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)
到:
M-oM-;M-?<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)
我可以使用这些特殊字符cat -A <myfile>
这是一个问题,因为这会破坏我的*.csproj文件并且无法在 Visual Studio 中加载项目。
Bitbucket 支持给了我关于.gitattributes和 config 的文章,我已经尝试过,但问题仍然存在:
$ git config core.autocrlf
true
$ cat .gitattributes
*.js text
*.cs text
*.xml text
*.csproj text
*.sln text
*.config text
*.cshtml text
*.json text
*.sql text
*.ts text
*.xaml text
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
$ cat .gitattributes
*.js text eol=crlf
*.cs text eol=crlf
*.xml text eol=crlf
*.csproj text eol=crlf
*.sln text eol=crlf
*.config text eol=crlf
*.cshtml text eol=crlf
*.json text eol=crlf
*.sql text eol=crlf
*.ts text eol=crlf
*.xaml text eol=crlf
Run Code Online (Sandbox Code Playgroud)
我是否缺少一些设置来帮助防止这组字符插入到我的文件的开头?
首先:M-o、M-;、 和M-?是将非 ASCII 字符显示为 ASCII 的表示技术。具体来说,它们是一种编码技术,用于显示已设置位 7 (0x80),然后显示其余位,就像字符是 ASCII 一样。小写字母o是 code 0x6f、;is0x3b和?is 0x3f。将高位 (0x80) 放回到所有三个中,并0x使用大写字母删除 和 ,我们得到值EF、BB和BF。如果没有别的事,你应该记住这个序列 \xe2\x80\x94EF BB BF\xe2\x80\x94 或者至少记住它存在,因为它是Unicode字节顺序标记或 BOM的UTF-8 编码,(你也应该记住它,至少它存在)。 U+FEFF
有关 Unicode 的更多一般信息,请参阅每个软件开发人员绝对、肯定必须了解 Unicode 和字符集的绝对最低限度(没有借口!)。
\n\n当将 Unicode 存储为 UTF-16 时,字节顺序标记有一个用途:它告诉您存储的数据是 UTF-16-LE 还是 UTF-16-BE。但当将 Unicode 存储为 UTF-8 时,字节顺序标记几乎完全没有用处。我个人认为永远不应该使用它。另一方面,微软显然相信它应该始终被使用(或几乎总是)。请参阅下面的维基百科引用。
\n\n\n\n\n...有人使用在线编辑器...
\n
显然,这个在线编辑器要么是由微软编写的,要么是由认为微软正确的人编写的。他们在您的纯文本文件中插入 UTF-8 字节顺序标记。
\n\n\n\n\nBitbucket 支持给了我关于
\n.gitattributes...的文章
除非在线编辑器查看.gitattributes文件内部,否则这不会有帮助:是该编辑器添加了 BOM。
也就是说,从 Git 2.18 开始,Git 就有了working-tree-encoding属性的概念。有些编辑可能真的会看这个。我可能没有正确理解微软的哲学\xe2\x80\x94我已经指出我不同意它。不过,我认为他们说:如果该文件的“主”副本应以 UTF-16 格式存储,则在任何 UTF-8 编码文件中存储 BOM。(旁注:UTF-8 BOM 不会告诉您 UTF-16 文件是 UTF-16-LE 还是 UTF-16-BE,所以我认为 \xe2\x80\x94again\xe2\x80\x94it\作为指示符几乎没用。另请参阅在 UTF-16、UTF-16BE、UTF-16LE 中,UTF-16 的字节序是计算机的字节序吗?)
无论如何,如果此编辑器确实查看某些配置选项,则设置配置选项\xe2\x80\x94(无论它是什么)\xe2\x80\x94 都会有所帮助。如果没有,那么您在这里所做的任何事情都无济于事。请注意working-tree-encoding,虽然与 Unicode 编码相关,但并不意味着应该或不应该包含 BOM。所以,如果你的 Git 是 2.18 或更高版本,你就有这个额外的旋钮可以转动,但这不是它的用途。如果它确实有帮助,那就太好了,但也是完全错误的。:-)
最奇怪的是:
\n\n\n\n\n[BOM] 破坏了我的
\n*.csproj文件并且无法在 Visual Studio 中加载项目。
Visual Studio 是微软的产品。维基百科页面指出:
\n\n\n\n\nMicrosoft 编译器和解释器以及 Microsoft Windows 上的许多软件(例如记事本)将 BOM 视为必需的幻数,而不是使用启发式方法。这些工具在将文本保存为 UTF-8 时添加 BOM,并且除非存在 BOM 或文件仅包含 ASCII,否则无法解释 UTF-8。
\n
人们可能会认为,如果他们的编辑坚持添加 BOM,他们的其他程序将能够处理 BOM。
\n