9

我有一个中等大小的 Java 文件。每次我对我的一个文件 BuildTable.java 进行更改时,Git 都会将其报告为巨大的更改,即使只有一两行。BuildTable.java 大约有 200 行,而这次提交中的更改仅更改了一行。

git-diff 输出:

--- a/src/BuildTable.java
+++ b/src/BuildTable.java
@@ -1 +1 @@
-import java.io.FileNotFoundException;^Mimport java.io.FileReader;^Mimport java.io.InputStreamReader;^Mimport java.io.PushbackReader;^Mimport java.util.ArrayList;^Mimport
\ No newline at end of file
+import java.io.FileNotFoundException;^Mimport java.io.FileReader;^Mimport java.io.InputStreamReader;^Mimport java.io.PushbackReader;^Mimport java.util.ArrayList;^Mimport
\ No newline at end of file

执行 git-commit -a 后

Created commit fe43985: better error notifications
 3 files changed, 54 insertions(+), 50 deletions(-)
 rewrite src/BuildTable.java (78%)

Git 是否将此文件视为二进制文件或其他文件?这是一个问题吗?如果是,我该如何解决这个问题?

4

4 回答 4

27

显然,git 不喜欢你的 mac 风格的行尾(仅限 CR)。它的 diff 算法使用 LF 作为行分隔符。

修复您的文件以具有 windows 样式 (CR LF) 或 unix (仅 LF) 行结尾。

于 2008-10-28T20:24:15.283 回答
20

为了解决这个问题,我不需要更改任何核心 git 设置,因为生成的默认行尾很好,只是这个特定文件被破坏了。为了修复它,我打开了 vim 并执行了以下命令

:%s/^M/\r/g

请注意,要输入“^M”,您必须先输入 ctrl-V,然后再输入 ctrl-M。

于 2008-10-30T19:17:00.143 回答
4

设置core.autocrlf和。core.safecrlf_ git-config这将导致 git 在从/向对象存储传输时自动转换行尾。您可能需要提交以存储“新”结尾。

从您粘贴的示例来看,您可能还患有“旧式 Mac 行尾”(感谢ddaaCharles Bailey的提示),它们只是CR没有任何 s 的裸 s ,这是LFgit 无法处理的情况。如果这是真的(使用十六进制编辑器检查),请使用类似recode将这些垃圾转换为某种 21 世纪格式的工具,例如正确的LF-only Unix 行尾。

于 2008-10-28T20:40:28.603 回答
0
git diff -b

向您显示差异时忽略行尾更改。

于 2009-11-29T07:28:52.257 回答