我在和git做斗争,却忽略了台词的结尾。这个问题已经被问过无数次了,但我仍然无法为我的用例找到答案。几乎羞于问..。开始吧。
背景信息:我使用PhpStorm IDE来完成大部分git操作。底层PhpStorm依赖于git来执行实际操作。
我面临的问题是,在PhpStorm中,我有一个在现有文件中插入/更新PhpDoc注释的助手脚本。这个脚本使用LF作为行尾(不可配置),我的IDE默认使用CRLF,因为我在Windows上。我知道我可以设置我的IDE使用LF,并将整个项目转换为LF。但这似乎是最后的解决办法。
因此,在脚本更新了PhpDoc并用LF替换了CRLF之后,在运行git status时列出了这些文件,我不想这样做。Git应该忽略(部分)有不同行尾的文件。我希望git status忽略这一点的原因是,PhpStorm似乎依赖于此来检测已更改的文件,并在默认情况下检查这些文件是否提交。手动逐个查看这些文件以查看PhpStorm告诉我“这些文件是相同的”(除了行尾),这是非常耗时的。
我尝试过本指南,尝试过core.autocrlf设置的各种变体,我尝试了几十种解决方案,但我仍然没有找到解决方案。
尝试所有这些解决方案确实教会了我一些关于git的事情,所以如果理解git,那么在这种情况下,core.autocrlf=true设置是无关紧要的,因为这会在提交时将CRLF转换为LF,但我的目标是将它们排除在git status之外。我一直在使用git diff --ignore-cr-at-eol,这不再显示差异,但git状态仍然存在。
发布于 2020-04-16 21:41:43
我很抱歉地告诉你,但是你想让git做的事情与git的意义和它的工作原理背道而驰。Git将字节级别上的任何更改视为更改,您不能覆盖此更改。这是没有意义的。git diff允许您这样做只是为了方便,以便在查看差异时,您可以关注相关的更改(例如,许多diff工具都设置了忽略空格更改的设置)。
我使用Webstorm,它支持.editorconfig,它本身支持不同文件的不同配置。我没有时间测试JetBrain的.editorconfig支持是否会尊重每个文件的设置,但这可能是最好的选择。
其他替代办法
发布于 2020-04-16 21:33:44
我知道我可以设置我的IDE使用LF,并将整个项目转换为LF。但这似乎是最后的解决办法。
这确实是最好的解决办法。原因是,正如您所指出的,每次您必须处理它时,您都需要重新检查文档并仔细阅读。有core.autocrlf和core.eol,然后是每个文件的.gitattributes。我认为即使有了这么多的灵活性,也可能有一些用例还没有涵盖。在我看来,处理线的结尾是不值得的时间。
因此,我总是建议做一个扫描,以清洁回购到任何你喜欢的结局,并完成它。如果您由于与许多人共享回购而无法立即执行此操作,则实现一个钩子以检查新提交是否具有正确的样式,甚至自动执行清理。然后等待一段时间,直到所有常见的部分完成,最后执行最后的扫描。
https://stackoverflow.com/questions/61260129
复制相似问题