【发布时间】:2022-10-13 01:47:49
【问题描述】:
我对 PhpStorm 和 git 有疑问。
每次我从例如添加文件时我的服务器的备份档案,PhpStorm 将所有文件显示为已更改,即使唯一的更改是行尾且没有内容。
我注意到这是因为我的 git 配置为使用 CRLF 检出文件和 LF 用于 repo 中的文件(这就是我想要的)。
现在问题来了,当我添加已经有 LF 换行符的文件时,所有这些文件都显示为“已修改”。当我对这些文件中的任何一个执行git add 时,换行符在文件系统中转换,并且 git/PhpStorm 发现这些文件与 repo 相同,并从“更改”列表中删除该文件。
但是当我添加一个包含数千个文件的整个目录时,手动添加所有没有真正改变的文件是一件很痛苦的事情。我无法添加整个文件夹,因为我首先想删除所有文件更改,然后查看文件内容中有哪些真正的更改。
我目前的配置是:
core.autocrlf=true
core.safecrlf=false
我的问题是:
有没有办法禁用文件显示为“已更改”的功能,即使将它们添加到 git 不会添加任何更改(但保持 Windows 中的文件具有 CRLF 和 repo LF 中的文件的行为)?
我已经发现我可以通过设置core.safecrlf=false 来禁用命令行git 中的"LF will be replaced by CRLF" 警告。但是这些文件在 PhpStorm 和git status 中仍然显示为“已更改”。
我为命令行 git 发现了一个类似的问题:Git status ignore line endings / identical files / windows & linux environment / dropbox / meld,但没有一个解决方案对我有用。
【问题讨论】:
-
我认为您有工作流程问题,而不是 Git 或 PhpStorm 问题。为什么您是否经常将数千个文件从您的 Linux 服务器复制到您的 Windows 机器上? LF 到 CRLF 的转换仅在您执行
git add时完成,正如您已经发现的那样。为什么你不能做一个git add .来进行这种转换,删除所有只编辑了换行符的文件,然后做一个git reset来查看剩余的更改?您是否考虑过运行一个命令行工具来为您进行这种转换? -
@CodeCaster 1. 大多数情况下,我们在创建新存储库并用旧存档文件的内容填充它时,或者当我们需要将服务器文件的状态与存储库中的状态进行比较时,都会遇到这个问题。我用
git add && git reset尝试了你的建议。它解决了一些问题,但仅适用于非常少量的文件。其余的仍然列在 phpstorm 和命令行 git 中。目前我尝试编写一个脚本,遍历所有文件并自动检查它们。我只是希望任何 git 配置或一个不错的单行命令都有更好的方法 -
与实际问题有点无关,但仍然:1)那些文件是什么类型的(PHP / HTML / JS / etc)? 2) 为什么不将它们全部使用
LF并仅将CRLF用于特定于Windows 的文件(例如web.config,如果您使用的是IIS Web 服务器等)并尽量不使用任何行尾转换?我的观点:PHP 可以很好地处理 LF 和 CRLF,无论是在 Linux/Mac 上的 Windows 上。大多数文本编辑器/工具也将处理 LF 文件(除非它可能是标准记事本)。这适用于您的代码/工作流程吗? -
@LazyOne 文件主要是 php、html、js、css 和其他一些文本类型(svg、less、json、txt 等)。禁用行尾转换是我上一家公司的方式,但在目前的公司中,大多数人都使用 windows,因此所有类似文本的文件都应该与 windows 换行符一起存储在工作目录中。
标签: git intellij-idea phpstorm core.autocrlf