看看这个git commit:https://github.com/ClosedXML/ClosedXML/commit/8fb8848e759c5d599b9079d4a1d102e2dda054e9
这是我有时会看到的提交示例。我有时也会遇到它,我想避免它。最初我认为这是一个换行符设置(\n
vs \r\n
),但这不是这里的情况。
这次提交究竟发生了什么变化?
答案 0 :(得分:3)
一个简单的git diff
揭示了真相:
~/OSS/ClosedXML $ git diff 8fb8848~1 8fb8848 -- ClosedXML/AttributeExtensions.cs
diff --git a/ClosedXML/AttributeExtensions.cs b/ClosedXML/AttributeExtensions.cs
index 89b8b7f9..be354555 100644
--- a/ClosedXML/AttributeExtensions.cs
+++ b/ClosedXML/AttributeExtensions.cs
@@ -1,4 +1,4 @@
-<U+FEFF>using System;
+using System;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
提交8fb8848
删除了曾经是该文件第一个字符的<U+FEFF>
字符。 <U+FEFF>
是一个Unicode字符,用作BOM
(字节排序标记)。
更多调查显示该文件编码为UTF-8
(或每个字符使用一个字节的编码)。
~/OSS/ClosedXML $ git checkout 8fb8848~1 -- ClosedXML/AttributeExtensions.cs
~/OSS/ClosedXML $ hexdump -C ClosedXML/AttributeExtensions.cs -n 64
00000000 ef bb bf 75 73 69 6e 67 20 53 79 73 74 65 6d 3b |...using System;|
00000010 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 4c |..using System.L|
00000020 69 6e 71 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 |inq;..using Syst|
00000030 65 6d 2e 4c 69 6e 71 2e 45 78 70 72 65 73 73 69 |em.Linq.Expressi|
00000040
提交ef bb bf
之前文件的前三个字节(8fb8848
)是BOM
编码为UTF-8
。
UTF-8
不需要一个BOM
,而且有些工具处理问题。如果文件保存为BOM
,您最好将编辑器配置为不插入UTF-8
。