我对PhpStorm和git有问题。
每次我从服务器的备份档案中添加文件时,PhpStorm都会显示所有文件已更改,即使唯一的更改是行尾而没有内容。
我注意到这一点,因为我的git被配置为使用CRLF作为签出文件,LF用于回购中的文件(这正是我想要的)。
问题现在出现了,当我添加已经有LF行中断的文件时,所有这些文件都显示为“修改”。当我对其中任何一个文件执行git add
操作时,换行符都在文件系统中转换,git/PhpStorm发现这些文件与repo完全相同,并从“更改”列表中删除该文件。
但是,当我添加包含数千个文件的整个目录时,手动添加所有没有真正更改的文件是很痛苦的。我无法添加整个文件夹,因为我首先喜欢删除所有文件更改,然后查看文件内容中有哪些真正的更改。
我的当前配置是:
core.autocrlf=true
core.safecrlf=false
我的问题是:
是否有一种方法可以禁用将文件显示为“已更改”的函数,即使将它们添加到git中也不会添加任何更改(但是保留Windows中的文件具有CRLF和回购LF中的文件的行为)吗?
我已经发现,通过设置"LF will be replaced by CRLF",可以在命令行git中禁用core.safecrlf=false
警告。但这些文件在PhpStorm和git status
中仍然显示为“已更改”。
我在命令行git中发现了一个类似的问题:Git status ignore line endings / identical files / windows & linux environment / dropbox / meld,但是没有一个解决方案对我有用。
发布于 2022-10-12 17:47:49
我找到了一种有用的方法,我在Git status ignore line endings使用了一个anser,我编写了一个脚本,它遍历所有文件,并为每个没有内容更改的文件触发行转换。
git status | grep modified | cut -d' ' -f 4- | while read x; do
echo -e -n "checking $x \r"
if [ "$(git --no-pager diff --ignore-cr-at-eol -- $x)" ]; then
echo "modified: $x"
else
## Add files to trigger auto clrf convert
#git add $x
# restore repo-state of this file to remove it from changes list
git checkout HEAD -- $x
fi
done
它比较更改的文件内容,并从“更改”列表中删除内容相同的文件。
它很好,但需要一段时间才能运行,所以我仍然对更好的答案持开放态度。我尝试了两种方法(使用git add
和` `git签出)都解决了这个问题,我不知道什么是最好的方法。
https://stackoverflow.com/questions/74039235
复制相似问题