这个git提交究竟发生了什么变化?

时间:2018-06-12 09:39:58

标签: git

看看这个git commit:https://github.com/ClosedXML/ClosedXML/commit/8fb8848e759c5d599b9079d4a1d102e2dda054e9

这是我有时会看到的提交示例。我有时也会遇到它,我想避免它。最初我认为这是一个换行符设置(\n vs \r\n),但这不是这里的情况。

这次提交究竟发生了什么变化?

1 个答案:

答案 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