我想知道为什么git告诉我这个:?
$ git diff MyFile.txt
diff --git a/MyFile.txt b/MyFile.txt
index d41a4f3..15dcfa2 100644
Binary files a/MyFile.txt and b/MyFile.txt differ
Run Code Online (Sandbox Code Playgroud)
他们不是文本文件吗?
我检查了.gitattributes,它是空的.为什么我收到这条消息?我不能再使用差异了
添加:
我注意到@
文件中有一个权限,这是什么?这可能是原因吗?
$ls -all
drwxr-xr-x 5 nacho4d staff 170 28 Jul 17:07 .
drwxr-xr-x 16 nacho4d staff 544 28 Jul 16:39 ..
-rw-r--r--@ 1 nacho4d staff 6148 28 Jul 16:15 .DS_Store
-rw-r--r--@ 1 nacho4d staff 746 28 Jul 17:07 MyFile.txt
-rw-r--r-- 1 nacho4d staff 22538 5 Apr 16:18 OtherFile.txt
Run Code Online (Sandbox Code Playgroud)
Phi*_*ley 71
它只是意味着当git检查文件的实际内容时(它不知道任何给定的扩展名不是二进制文件 - 如果你想明确告诉它,你可以使用属性文件 - 参见手册页).
检查了文件的内容后,它看到的东西不是基本的ascii字符.作为UTF16,我希望它会有"有趣"的字符,所以它认为它是二进制的.
如果你有文件的国际化(i18n)或扩展字符格式,有办法告诉git.我没有充分了解设置的确切方法 - 您可能需要RT [Full] M ;-)
编辑:快速搜索SO找到了can-i-make-git-recognition-a-utf-16-file-as-text,它应该会给你一些线索.
nai*_*rch 36
如果你还没有设置文件的类型,Git会尝试自动确定它,并且一个包含很长行和一些宽字符(例如Unicode)的文件被视为二进制文件.使用.gitattributes文件,您可以定义Git如何解释文件.手动设置diff属性允许Git将文件内容解释为文本并执行通常的差异.
只需将.gitattributes添加到存储库根文件夹,并将diff属性设置为路径或文件.这是一个例子:
src/Acme/DemoBundle/Resources/public/js/i18n/* diff
doc/Help/NothingToSay.yml diff
*.css diff
Run Code Online (Sandbox Code Playgroud)
如果要检查文件上是否设置了属性,可以在git check-attr的帮助下完成
git check-attr --all -- src/my_file.txt
Run Code Online (Sandbox Code Playgroud)
关于Git属性的另一个很好的参考可以在这里找到.
Hem*_*ant 19
我遇到了这个问题,Git GUI和SourceTree将Java/JS文件视为二进制文件,因此无法看到差异
使用以下内容在.git\info文件夹中创建名为"attributes"的文件解决了该问题
*.java diff
*.js diff
*.pl diff
*.txt diff
*.ts diff
*.html diff
Run Code Online (Sandbox Code Playgroud)
如果您想对所有存储库进行此更改,则可以在以下位置添加属性文件$ HOME/.config/git/attributes
Chr*_*phy 18
如果文本文件中有一条超长行,Git甚至会确定它是二进制的.我分解了一个长字符串,把它变成了几个源代码行,然后突然文件从'二进制'变成了我能看到的文本文件(在SmartGit中).
因此,如果不在编辑器中点击"Enter",请不要键入太多的右键 - 否则稍后Git会认为您已创建了二进制文件.
在新编辑器中编辑我的一个文件后,我遇到了同样的问题.事实证明,新编辑器使用了与我的旧编辑器(UTF-8)不同的编码(Unicode).所以我只是告诉我的新编辑器用UTF-8保存我的文件,然后git再次正确显示我的更改,并没有将其视为二进制文件.
我认为问题只是git不知道如何比较不同编码类型的文件.所以你使用的编码类型确实无关紧要,只要它保持一致.
我没有测试它,但我确定我是否会使用新的Unicode编码提交我的文件,下次我对该文件进行更改时,它会正确显示更改并且不会将其检测为二进制文件,因为然后它会将两个Unicode编码文件而不是UTF-8文件与Unicode文件进行比较.
您可以使用Notepad ++之类的应用程序轻松查看和更改文本文件的编码类型; 在Notepad ++中打开文件,然后使用工具栏中的"编码"菜单.
这也是由具有UTF-8 和 BOM编码的文本文件引起的(至少在 Windows 上)。将编码更改为常规UTF-8立即使 Git 将文件视为 type=text
小智 6
我遇到了同样的问题.当我在谷歌搜索解决方案时,我找到了线程,但我仍然没有发现任何线索.但我觉得我在研究后找到了原因,下面的例子将清楚地解释我的线索.
echo "new text" > new.txt
git add new.txt
git commit -m "dummy"
Run Code Online (Sandbox Code Playgroud)
目前,文件new.txt被视为文本文件.
echo -e "newer text\000" > new.txt
git diff
Run Code Online (Sandbox Code Playgroud)
你会得到这个结果
diff --git a/new.txt b/new.txt
index fa49b07..410428c 100644
Binary files a/new.txt and b/new.txt differ
Run Code Online (Sandbox Code Playgroud)
试试这个
git diff -a
Run Code Online (Sandbox Code Playgroud)
你会得到以下
diff --git a/new.txt b/new.txt
index fa49b07..9664e3f 100644
--- a/new.txt
+++ b/new.txt
@@ -1 +1 @@
-new file
+newer text^@
Run Code Online (Sandbox Code Playgroud)
我们遇到过这种情况,每当我们尝试对其进行更改时,.html 文件都会被视为二进制文件。看不到差异非常不酷。老实说,我没有检查这里的所有解决方案,但对我们有用的是以下内容:
git deletion
. Git 说Deleted file with mode 100644 (Regular) Binary file differs
New file with mode 100644 (Regular) 1 chunk, 135 insertions, 0 deletions
该文件现在已添加为常规文本文件从现在开始,我在文件中所做的任何更改都被视为常规文本差异。您也可以压缩这些提交(1、2 和 3 是您所做的实际更改),但我更希望将来能够看到我做了什么。Squashing 1 & 2 将显示二进制变化。
尝试使用file查看编码详细信息(参考):
cd directory/of/interest
file *
Run Code Online (Sandbox Code Playgroud)
它产生如下有用的输出:
$ file *
CR6Series_stats resaved.dat: ASCII text, with very long lines, with CRLF line terminators
CR6Series_stats utf8.dat: UTF-8 Unicode (with BOM) text, with very long lines, with CRLF line terminators
CR6Series_stats.dat: ASCII text, with very long lines, with CRLF line terminators
readme.md: ASCII text, with CRLF line terminators
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
83823 次 |
最近记录: |