在Pluralsight上进行git课程的介绍,git并没有与diff部分合作。
操作系统是Windows 8.1。我试图在没有特殊字符的情况下对两个版本的文本文件进行区分。我通过以下方法在PowerShell中创建了这个文本文件:
echo "Hello, world" > readme.txt
Regular diff命令表示二进制文件不同。
PS C:\GitTest> git diff HEAD~1..HEAD
diff --git a/readme.txt b/readme.txt
index 440580d..0d6852b 100644
Binary files a/readme.txt and b/readme.txt differ
当我用--text强制它时,我得到这个输出:
PS C:\GitTest> git diff --text HEAD~1..HEAD
diff --git a/readme.txt b/readme.txt
index 83f0e87..fef1216 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
-ÿþH-\ No newline at end of file
+ÿþH++\ No newline at end of file
不确定为什么它首先认为它是二元的,或者为什么上面的差异似乎无用。该文件的两个版本如下所示:
HEAD〜1:
Hello, Git!
Hello, again!
Hello, for the last time!
HEAD:
Hello, Git!
Hello, again!
Hello, for the last time!
Hello, again I hope this really is the last time...
我的编辑器正在使用CRLF,但我已将git设置为core.autocrlf = true。我确保HEAD和HEAD~1版本在文件末尾都有换行符。
我觉得我可能错过了一些简单的东西 - 它是什么?非常感谢任何帮助。
答案 0 :(得分:1)
diff中的前两个字符(带有点和y的y)是字节0xFF
和0xFE
的Latin-1解释。如果这些字节被解释为UCS2 / UTF16,则它们是小端字节顺序标记。在那些字节之后,你得到的是" Hello,world"然后可能是一个导致强制文本模式差异放弃的NUL。
因此,您的文本编辑器已将文件保存为UTF16LE格式,这在Windows中很常见,但在unix世界中很少见,git来自。这就是git混淆的原因。
如果您可以告诉编辑器将文件保存为UTF8(或其他一些8位编码),那么它将与git相处得更好。或者您可能希望看到this question关于git的配置选项,以使其更好地使用UTF16文件。