git :什么都没有改变,但将每一行标记为“已更改”

git : nothing changed but mark every line "changed"

提问人:89barde 提问时间:12/28/2022 最后编辑:torek89barde 更新时间:12/29/2022 访问量:130

问:

IDE:Eclipse和VS代码 Git 工具:源代码树、VS 代码 操作:我的代码中没有任何更改。但是当按 ctrl+s 时,它能够保存并且 suorceTree 将显示每一行都已编辑。我发现的唯一变化(由sourceTree显示):

形式:import org.apache.poi.ss.usermodel.Cell;␍import org.apache.poi.ss.usermodel.CellType;

对此:import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType;

我很确定我没有使用任何“保存时格式化代码”设置,这是这个版本中的 git 错误吗?

尝试:在 VS 代码、Eclipse、写字板中按 Ctrl + S 除了 :编辑一行(保存时不更改 WHOLD 文件)并推送到 git 分支。

Eclipse visual-studio-code atlassian-sourcetree 行尾

评论

0赞 howlger 12/28/2022
我猜是你的一个错误,而不是 Git 的一个错误,考虑到你甚至没有提到你的配置,比如 ,等等。core.autocrlf

答:

1赞 Joaquín Fritsch Santis 12/28/2022 #1

默认情况下,Git 使用 LF (Linux) 行尾,而 Windows 则推送 CRLF 行尾。

Git 尝试假设如果您使用的是 Windows,您需要 CRLF,这对普通用户有好处,因为程序通常预先配置为使用 CRLF。

如果您使用的是 Windows 并且收到错误的更改报告,则 Git 可能会忽略行尾,因此当您克隆或拉取代码时,它将以 LF 格式显示。然后,当您将进度保存在 CRLF 配置的编辑器中时,每行结尾都会更改回 CRLF,从而修改整个文件。

在 Windows 安装 Git 期间,此行为可能会更改,下次安装 Git 时请密切注意。

解决方案 1:配置 Git

您可以将 Git 配置为在签出时将 LF 替换为 CRLF(克隆、拉取等),以便您可以在 CRLF 中工作,然后在提交时将 CRLF 替换回 LF,这样您就不会提交整个几乎没有更改的文件。您想要的选项是 ,您可以在终端中执行此操作:core.autocrlf

git config --global core.autocrlf true

--global 参数为整个用户进行此更改(您可能希望这样做)

解决方案 2:开始使用 LF

您可以将文本编辑器和 IDE 配置为默认使用 LF,这样,当您克隆或拉入 LF 时,您将继续使用 LF 工作并保存您的工作,同时保留 Git 的默认行尾。

您通常可以找到此选项,称为 EOL(行尾)。

评论

0赞 89barde 12/29/2022
非常感谢您回答我!就像你说的,我正在使用 Windows。有没有一种解决方案可以不让“替换运动”发生?还是没有在 git 上提交所有行?我相信我的同事中没有一个会乐于通过行尾来消除大量的冲突。
0赞 Joaquín Fritsch Santis 12/29/2022
在对这个问题进行更多研究时,我发现我把一些东西混淆了......我用更准确的信息更新了我的答案,并添加了适当的解决方案。我希望这对你有用!
1赞 89barde 12/29/2022
在审查代码(显示所有隐藏字符)之后,我发现有一行以 CR 而不是 CRLF 结尾,该行的更改使 git 认为我更改了整个文件。让 git 忽略空格更改确实有帮助,谢谢!