我想知道为什么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) 遇到中型项目的问题,因为git将它们视为文本和合并,因此Visual Studio项目文件会出现问题.我想将文件设置为二进制文件,以便git不会自动合并这些文件.
有没有办法做到这一点?
GNU diff似乎不够智能,无法检测和处理UTF-16文件,这让我感到惊讶.我错过了一个明显的命令行选项吗?有没有好的选择?
我尝试将其添加到.gitattributes:
* text=auto
*.sql diff
Run Code Online (Sandbox Code Playgroud)
但它仍然显示如下:
BIN ????? WebRole/Sql/Objects/dbo.Content.Table.sql ?
WebRole/Sql/dbo.Content.Table.sql Binary file not shown
Run Code Online (Sandbox Code Playgroud)
非常感谢这方面的帮助.
我需要经常发布一些软件,软件包含在VMWare磁盘文件中,即.vmdk文件.我想要的是某种二进制差异和补丁实用程序,以使生成的delta尽可能小.
我的存储库中只有一个cs文件,Git似乎认为它是二进制文件.(在git gui,它只是说"二进制文件不同".)
如何向Git表明我的cs文件是文本文件?
有没有办法强制Git将.reg文件视为文本?我正在使用Git来跟踪我的Windows注册表调整和Windows .reg用于这些文件.
更新1:我得到它来运行差异(谢谢,安德鲁).但是,现在看起来如下所示.这是编码问题吗?
index 0080fe3..fc51807 100644
--- a/Install On Rebuild/4. Registry Tweaks.reg
+++ b/Install On Rebuild/4. Registry Tweaks.reg
@@ -1,49 +1,48 @@
-<FF><FE>W^@i^@n^@d^@o^@w^@s^@ ^@R^@e^@g^@i^@s^@t^@r^@y^@ ^@E^@d^@i^@t^@o^@r^@
-^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;^@;
-^@^M^@
...
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
更新2:感谢所有帮助过的人:这就是我最终做的事情:创建.gitattributes包含内容*.reg text diff的文件,然后我将文件转换为UTF-8,因为UTF-16与diffs一样奇怪.我没有使用任何外国字符,所以UTF-8适合我.
我正在尝试使用 GIT 来跟踪对相当大的 XML 文件(大约 3 Mb)的更改。该文件采用 UTF-8 格式,以 CRLF 行结尾(我在 Windows 10 中工作)。但由于某种原因,GIT 一直认为它是二进制文件,并且不显示任何差异。或者只是无法检测到变化。
Sourcetree 中的差异显示消息“未检测到此文件中的任何更改,或者它是一个二进制文件”
我尝试在.gitattributes中显式设置属性,但似乎这不是原因:
*.xml crlf diff
Run Code Online (Sandbox Code Playgroud)
git check-attr --all -- sorkin.xml
sorkin.xml: diff: set
sorkin.xml: crlf: set
Run Code Online (Sandbox Code Playgroud)
我发现当我将大文件切成三个较小的部分(小于 1 Mb)时,GIT 会正确显示它们的更改。
计算 diff 时,GIT 对文件大小有限制吗?
我和朋友同时在同一个.cs文件上工作,当有合并冲突时,git指出存在冲突,但文件没有加载通常的"HEAD"">>>"因为.cs文件是二进制文件.所以我们在我们的.gitattributes文件中添加了很多东西(*.cs文本等) - 使git将它视为一个无效的文本文件.
多数民众赞成当我们意识到git可以区分其他.cs文件而不是这个.原因是因为它包含一些中文字符,因此在unicode编码中.
那么我们如何制作git diff或合并utf-16或utf-8格式的文件呢?
如果我推动,gitlab会显示出不同的东西.所以我不知道git如何在服务器上区分,而不是bash.
我们的定制IDE输出XML文件,其编码使它们看起来像二进制文件.这些文件的差异和合并失败.
我们可以使用该tr命令创建这些文件的ASCII版本.我想进入一个状态,在这些文件提交之前总是自动转换为ascii.
我用Git拿起了我的版本控制副本,它全心全意警告我不要使用钩子,除非我真的需要.
我应该为此目的使用钩子吗?或者我可以做其他事情以确保文件在提交之前始终被转换?
Windows XP与msysgit 1.7.4
- = update = -
感谢大家的帮助和耐心.期待这个问题我尝试了以下,但它不起作用:
echo "*.xrp filter=xrp" > .git/info/attributes
git config --global filter.xrp.clean 'tr -cd '\''\11\12\15\40-\176'\'''
git config --global filter.xrp.smudge cat
git checkout --force
Run Code Online (Sandbox Code Playgroud)
此配置更改后,文件保持不变.即使我删除并重新结账.
tr配置为clean任务的命令确实可以单独工作.证明:
$ head -n 1 cashflow/repo/C_GMM_CashflowRepo.xrp
ÿþ< ! - - X M L R e p o s i t o r y f i l e 1 . 0 - - >
$ tr …Run Code Online (Sandbox Code Playgroud)